невозможно воспроизвести сырой аудио файл - PullRequest
1 голос
/ 26 августа 2010

У меня есть необработанный аудиофайл, снятый с камеры в формате u-law mono 8KHZ (без заголовков wav). Проблема, с которой я столкнулся, заключается в том, что когда я пытаюсь воспроизвести файл, у меня просто появляется сильный шум. Я подключил необработанный звук через программу под названием goldwave, и она отлично воспроизводит файл. Я уверен, что мне просто не хватает чего-то простого.

Я пытался использовать волновые функции, но безуспешно. Нужно ли мне сначала декодировать данные из u-law, прежде чем пытаться протолкнуть их через волновые функции?

Ответы [ 2 ]

0 голосов
/ 27 августа 2010

Если вы просто используете функции waveOut в Windows API, третий параметр waveOutOpen - это указатель на структуру WAVEFORMATEX:

MMRESULT waveOutOpen(
    LPHWAVEOUT phwo,
    UINT_PTR uDeviceID,
    LPWAVEFORMATEX pwfx,
    DWORD_PTR dwCallback,
    DWORD_PTR dwCallbackInstance,
    DWORD fdwOpen
);

Структура WAVEFORMATEX позволяет вам указать формат, и Windows должна иметь возможность выполнять u-Law без необходимости устанавливать что-либо.

typedef struct {
  WORD  wFormatTag;
  WORD  nChannels;
  DWORD nSamplesPerSec;
  DWORD nAvgBytesPerSec;
  WORD  nBlockAlign;
  WORD  wBitsPerSample;
  WORD  cbSize;
}WAVEFORMATEX;

Установите wFormatTag на WAVE_FORMAT_MULAW или 0x0007. Убедитесь, что вы правильно заполнили другие параметры для 1 канала с 8000 выборками / с и 8 битами / выборкой.

Если это не помогло, пожалуйста, отправьте код, где вы открываете аудиоустройство и воспроизводите файл. Или вот реализация delphi декодирования u-Law в линейный PCM (ulawDecode), так что вы можете декодировать его самостоятельно:

http://www.koders.com/delphi/fidEAA58384F59968FEDD0670F6EABF09DF3A5C58A5.aspx?s=algorithm#L19

0 голосов
/ 27 августа 2010

Да. Функции Waveout ожидают несжатого звука, а это не то, что у вас есть.

Но ulaw - это почти PCM, и его очень легко декодировать. Быстрый поиск привел меня к источнику C для алгоритма, так что он определенно доступен, но я не мог легко найти источник pascal / delphi. http://www.programmersheaven.com/download/3826/download.aspx - версия C. Выглядит так, будто переводить это будет достаточно просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...