Common Source Code Project for Qt (a.k.a for FM-7).
Revision | a80d74ccb7b0356f43c371c5e4e4e3fca72f9cab (tree) |
---|---|
Zeit | 2022-08-17 03:49:08 |
Autor | K.Ohta <whatisthis.sowhat@gmai...> |
Commiter | K.Ohta |
[OSD][Qt][SOUND] .
@@ -451,34 +451,48 @@ void OSD_BASE::release_sound() | ||
451 | 451 | void OSD_BASE::initialize_sound(int rate, int samples, int* presented_rate, int* presented_samples) |
452 | 452 | { |
453 | 453 | #if 0 |
454 | + | |
455 | + int latency_ms = (samples * 1000) / rate; | |
454 | 456 | std::shared_ptr<SOUND_OUTPUT_MODULE_BASE>out_driver = m_output_driver; |
455 | - disconnect(this, SIGNAL(sig_set_volume(double)), nullptr, nullptr); | |
456 | - disconnect(this, SIGNAL(sig_snd_reset_to_default()), nullptr, nullptr); | |
457 | 457 | |
458 | 458 | if(out_driver.get() != nullptr) { |
459 | - int latency_ms = (samples * 1000) / rate; | |
460 | - if(out_driver->reconfig_sound(rate, 2)) { // ToDo: Channels. | |
461 | - out_driver->update_latency(latency_ms, true); | |
462 | - rate = out_driver->get_sample_rate(); | |
463 | - latency_ms = out_driver->get_latency_ms(); | |
464 | - samples = (latency_ms * 1000) / rate; | |
465 | - } | |
466 | - sound_us_before_rendered = out_driver->driver_processed_usec(); | |
467 | - elapsed_us_before_rendered = out_driver->driver_elapsed_usec(); | |
468 | - | |
469 | - connect(this, SIGNAL(sig_snd_set_volume(double)), out_driver->get_real_driver(), SLOT(set_volume(double))); | |
470 | - connect(this, SIGNAL(sig_snd_reset_to_default()), out_driver->get_real_driver(), SLOT(reset_to_default())); | |
471 | - | |
472 | - connect(this, SIGNAL(sig_snd_request_to_release()), out_driver.get(), SLOT(request_to_release())); | |
473 | - | |
459 | + disconnect(out_driver.get()); | |
460 | + if((out_driver->get_latency_ms() != latency_ms) || (out_driver->get_sample_rate() != rate)) { | |
461 | + if(out_driver->reconfig_sound(rate, 2)) { // ToDo: Channels. | |
462 | + out_driver->update_latency(latency_ms, true); | |
463 | + rate = out_driver->get_sample_rate(); | |
464 | + latency_ms = out_driver->get_latency_ms(); | |
465 | + samples = (latency_ms * 1000) / rate; | |
466 | + } | |
467 | + sound_us_before_rendered = out_driver->driver_processed_usec(); | |
468 | + elapsed_us_before_rendered = out_driver->driver_elapsed_usec(); | |
469 | + } | |
470 | + //sound_us_before_rendered = out_driver->driver_processed_usec(); | |
471 | + //elapsed_us_before_rendered = out_driver->driver_elapsed_usec(); | |
472 | + } else { | |
473 | + sound_us_before_rendered = 0; | |
474 | + elapsed_us_before_rendered = 0; | |
475 | + // ToDo: | |
476 | + m_output_driver.reset(new SOUND_OUTPUT_MODULE_BASE(this, | |
477 | + nullptr, | |
478 | + rate, latency_ms, 2, | |
479 | + nullptr, 0)); | |
480 | + out_driver = m_output_driver; | |
481 | + } | |
482 | + | |
483 | + if(out_driver.get() != nullptr) { | |
484 | + rate = out_driver->get_sample_rate(); | |
485 | + latency_ms = out_driver->get_latency_ms(); | |
486 | + samples = (latency_ms * 1000) / rate; | |
474 | 487 | //connect(this, SIGNAL(sig_snd_update_rate(int)), out_driver.get(), SLOT(update_rate(int)), Qt::QueuedConnection); |
475 | 488 | //connect(this, SIGNAL(sig_snd_update_channels(int)), out_driver.get(), SLOT(update_channels(int)), Qt::QueuedConnection); |
476 | 489 | //connect(this, SIGNAL(sig_snd_update_latency(int)), out_driver.get(), SLOT(update_latency(int)), Qt::QueuedConnection); |
477 | 490 | //connect(this, SIGNAL(sig_snd_update_latency(int, bool)), out_driver.get(), SLOT(update_latency(int, bool)), Qt::QueuedConnection); |
478 | 491 | //connect(this, SIGNAL(sig_snd_reconfig(int, int)), out_driver.get(), SLOT(reconfig_sound(int, int)), Qt::QueuedConnection); |
479 | - } else { | |
480 | - sound_us_before_rendered = 0; | |
481 | - elapsed_us_before_rendered = 0; | |
492 | + connect(this, SIGNAL(sig_snd_set_volume(double)), out_driver.get(), SLOT(set_volume(double))); | |
493 | + connect(this, SIGNAL(sig_snd_reset_to_default()), out_driver.get(), SLOT(reset_to_default())); | |
494 | + connect(this, SIGNAL(sig_snd_request_to_release()), out_driver.get(), SLOT(request_to_release())); | |
495 | + | |
482 | 496 | } |
483 | 497 | #else |
484 | 498 | // ToDo: Sound Input |
@@ -608,9 +622,13 @@ void OSD_BASE::release_sound() | ||
608 | 622 | sound_exit = true; |
609 | 623 | sound_initialized = false; |
610 | 624 | #if 0 |
611 | - m_output_driver->stop(); | |
612 | - m_output_driver->reset_to_default(); | |
613 | - disconnect(this, nullptr, m_output_driver.get(), nullptr); | |
625 | + if(m_output_driver.get() != nullptr) { | |
626 | + m_output_driver->stop(); | |
627 | + m_output_driver->reset_to_default(); | |
628 | + disconnect(m_output_driver.get()); | |
629 | + } | |
630 | + m_output_driver.reset(); | |
631 | + | |
614 | 632 | #else |
615 | 633 | m_audioOutputSink->stop(); |
616 | 634 | m_audioOutputSink->disconnect(); |
@@ -6,13 +6,15 @@ SOUND_OUTPUT_MODULE_BASE::SOUND_OUTPUT_MODULE_BASE(OSD_BASE *parent, | ||
6 | 6 | int base_rate, |
7 | 7 | int base_latency_ms, |
8 | 8 | int base_channels, |
9 | - void *extra_config_values) | |
9 | + void *extra_config_values, | |
10 | + int extra_config_bytes) | |
10 | 11 | : |
11 | 12 | m_config_ok(false), |
12 | 13 | m_rate(base_rate), |
13 | 14 | m_latency_ms(base_latency_ms), |
14 | 15 | m_channels(base_channels), |
15 | - m_extconfig(extra_config_values), | |
16 | + m_extconfig_ptr(extra_config_values), | |
17 | + m_extconfig_bytes(extra_config_bytes), | |
16 | 18 | m_wordsize(sizeof(int16_t)), |
17 | 19 | QObject(qobject_cast<QObject*>parent) |
18 | 20 | { |
@@ -164,7 +166,11 @@ bool SOUND_OUTPUT_MODULE_BASE::start() | ||
164 | 166 | bool _stat = false; |
165 | 167 | |
166 | 168 | if(q.get() != nullptr) { |
167 | - _stat = q->open(QIODeviceBase::Write | QIODeviceBase::Unbuffered); | |
169 | + #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) | |
170 | + _stat = q->open(QIODeviceBase::ReadWrite | QIODeviceBase::Truncate | QIODeviceBase::Unbuffered); | |
171 | + #else | |
172 | + _stat = q->open(QIODevice::ReadWrite | QIODevice::Truncate | QIODevice::Unbuffered); | |
173 | + #endif | |
168 | 174 | update_driver_fileio(); |
169 | 175 | } |
170 | 176 | if(_stat) { |
@@ -76,7 +76,9 @@ public: | ||
76 | 76 | int base_rate = 48000, |
77 | 77 | int base_latency_ms = 100, |
78 | 78 | int base_channels = 2, |
79 | - void *extra_config_values = nullptr); | |
79 | + void *extra_config_values = nullptr, | |
80 | + int extra_config_bytes = 0); | |
81 | + | |
80 | 82 | ~SOUND_OUTPUT_MODULE_BASE(); |
81 | 83 | |
82 | 84 | std::recursive_timed_mutex m_locker; |