【问题标题】:Recorded sound by core audio is distorted and noisy核心音频录制的声音失真且嘈杂
【发布时间】:2015-12-11 17:18:52
【问题描述】:

我一直在尝试使用 Mac OS X 上的音频队列来录制声音。现在,我的代码可以正常工作,我可以将录制的声音存储在文件中,但是当我播放声音时,它会失真、嘈杂且几乎无用。我已经根据 Apple 发布的官方代码(SpeakHere)改编了我的代码,但它似乎不起作用。我不知道问题出在哪里,但我猜可能是格式的设置,就像:

  AudioStreamBasicDescription recordFormat;
memset(&recordFormat, 0, sizeof(recordFormat));

recordFormat.mFormatFlags =         kAudioFormatFlagIsPacked | kAudioFormatFlagIsSignedInteger;
recordFormat.mFormatID         = kAudioFormatALaw; // 2
recordFormat.mSampleRate       = 16000.0;               // 3
recordFormat.mChannelsPerFrame = 1;                     // 4
recordFormat.mBitsPerChannel   = 16;                    // 5
recordFormat.mBytesPerPacket   = recordFormat.mChannelsPerFrame * sizeof (SInt16);                       // 6
recordFormat.mBytesPerFrame =
recordFormat.mChannelsPerFrame * sizeof (SInt16);
recordFormat.mFramesPerPacket  = 1;                     // 7
recordFormat.mReserved = 0;

感谢任何有关主题的线索(录制难以理解、失真和嘈杂的原因)声音。

编辑

我使用 CoolEdit Pro 打开了文件。它看起来像这样:

WAVE file form

【问题讨论】:

  • 增益太大导致削峰?
  • @LinusLecter 尝试使用 Audacity 等软件分析音频波形。
  • 什么样的失真?什么样的噪音?你是如何播放文件的?为什么使用 16kHz 的采样率?其他录音机可以通过同一个麦克风录制相同的声音吗?
  • @hotpaw2 好吧,我必须将缓冲区发送到语音识别服务器,他们需要那个频率。我已成功使用 AVAudioRecorder 录制声音,效果很好,但我需要一个流。如果您知道任何提供缓冲区的 [第三方?] 库,我真的很感激。由于服务器无法识别我过去发送的数据流,我将其保存在文件中,我发现它完全被扭曲了。好吧,我不知道该怎么称呼这种失真,但问题是,我什至无法识别自己的声音。
  • 什么音频文件格式?

标签: c cocoa core-audio


【解决方案1】:

CoolEdit 快照看起来像是在读取具有 44.1 kHz 采样率线性 PCM 格式的文件。您似乎将 16 kHz ALaw 格式的数据存储到该文件中,这可能是数据或文件的错误格式。

【讨论】:

  • 好吧,我没有记录 Alaw 格式,在代码中它设置为 LinearPCM。对于你是对的频率,这次我使用的是 44.1k,但无论如何在 16k 中都是一样的。
  • 您发布的第 5 行代码显示: kAudioFormatALaw ,因此 ALaw 是您要求音频队列记录的格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 2011-08-21
相关资源
最近更新 更多