2013-01-04 9 views
3

Я нахожусь в середине переноса нашего приложения на основе QT4.X в QT5. Поддержка Phonon была удалена в QT5, поэтому я изменил свой код, который воспроизводит волновой файл для использования QSound.QT5 QSound не воспроизводит все волновые файлы

Изменения довольно просты. Мне просто пришлось использовать QSound, который теперь находится в мультимедийной библиотеке. Вот код:

QSound::play("small_wave_file.wav"); 

Для большинства моих волновых файлов это работает нормально; однако для моего волнового файла (с частотой дискретизации 44100 Гц) он не работает.

Официальная ошибка QT может быть найдена here.

UPDATE: Эта ошибка была исправлена ​​в кварт 5.1

ответ

2

Оказывается, что некоторые волновые файлы запутать QSound. Все еще не совсем точно, что вызывает проблему. Когда я загрузил свой волновой файл в Audacity, а затем экспортировал его обратно в другой волновой файл без каких-либо изменений (такая же частота дискретизации ...). QSound отлично сыграл файл.

В MacOSX, когда я нажимаю «Получить информацию» в проблемном волновом файле, общая волновая информация из волнового файла недоступна; поэтому, возможно, QSound не смог получить информацию о частоте дискретизации; и потому что он не знал, какую частоту дискретизации ожидать от волнового файла?

Интересная часть состоит в том, что iTunes воспроизвела оригинальный файл просто отлично, и у него была правильная частота дискретизации. Кроме того, Phonon использовал также оригинальный файл.

В любом случае, надеюсь, это поможет некоторым людям, имеющим проблемы с методом QSound :: play().

UPDATE: Поскольку QSound :: play() был очень глючным на mac, я решил использовать родной NSSound для воспроизведения моих волновых файлов из приложения QT на Mac. Вот код:

void play_sound(const char* file) 
{ 
    NSSound *sound = [[NSSound alloc] initWithContentsOfFile:[NSString stringWithUTF8String:file] byReference:NO]; 
    [sound play]; 
    [sound release]; 
} 
+0

Я бы поставил ошибку Qt с прикрепленным файлом проблемной волны. – paulm

+1

Я думал, что сделал, но я этого не сделал. Сегодня я открою его. Благодарю. – Aki

+0

На самом деле я открыл его (добавлена ​​ссылка на ошибку). Этот вопрос был рассмотрен в qt 5.1 – Aki