录制音频数据并将其发送到 c++ 函数

Posted

技术标签:

【中文标题】录制音频数据并将其发送到 c++ 函数【英文标题】:Record and send audio data to c++ function 【发布时间】:2017-05-10 11:23:45 【问题描述】:

我需要以 PCM 格式 8 KHz 16 Bit Mono 实时发送音频数据。

音频必须像具有长度的字符数组一样发送 (, )。

现在我是音频处理的初学者,无法真正理解如何完成。我最好的尝试是转换为 iLBC 格式并尝试,但它无法正常工作。是否有任何示例如何录制音频并将其转换为任何格式。我已经阅读了 Chris Adamson 和 Kevin Avila 的 Learning Core Audio,但我确实没有找到有效的解决方案。

简单的我需要:

(record)->(convert?)-> send(char *data, int length);

因为我需要发送无法使用播放器的字符数组之类的数据。

编辑: 我设法使一切都与记录和读取缓冲区一起工作。我无法管理的是:

 if (ref[i]->mAudioDataByteSize != 0)
       char * data = (char*)ref[i]->mAudioData;
       sendData(mHandle, data, ref[i]->mAudioDataByteSize);
        

【问题讨论】:

http://***.com/questions/1010343/how-do-i-record-audio-on-iphone-with-avaudiorecorder 无法真正使用 AVAudioRecorder 因为我需要缓冲数据然后压缩然后实时发送思想套接字。 How do I record audio on iPhone with AVAudioRecorder?的可能重复 不,我不会使用 AVAudioRecorder 实时记录、转换和发送缓冲区。 AVAudioEngine 可以帮助您。 【参考方案1】:

这并不是真正的初学者任务。解决方案是使用 RemoteIO 音频单元、音频队列 API 或 AVAudioEngine installTapOnBus 块。这些将为您提供近乎实时(取决于缓冲区大小)的音频样本缓冲区(Int16 或浮点数等),您可以将其转换、压缩、打包成其他数据类型或数组等。通常通过调用回调函数或阻止您提供的对传入的录制音频样本缓冲区执行任何操作。

【讨论】:

是的,但是当我获得音频样本数组并仅将 int-s 或浮点数转换为字符时,另一端的声音并不是真正的(只是一些噪音)。所以也许其他问题是有任何函数或任何转换器将音频数据作为字符数组返回。 贴出你是如何进行类型转换的代码,并打印出一些示例。 好的,因为编辑代码并且没有版本控制(导致在演示项目中尝试代码)我不能在星期一之前发布它。 嗨,很抱歉回复晚了,我无法恢复旧代码(在没有代码版本控制的情况下工作了大约一个月),但我发布了有问题的部分。

以上是关于录制音频数据并将其发送到 c++ 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何录制声音并将其从 Web 应用程序发送到服务器?

从 nodejs 录制音频和流式传输到客户端

如何录制音频并将其保存到沙盒?

将 C# 字符串作为参数发送到非托管 C++ DLL 函数

从 C++ ASIO 库用 C# 录制音频流

如何在浏览器中录制音频或视频并将其存储在我的服务器的数据库中?