如何修改 SpeakHere 示例应用程序以在 iPhone 上以单声道格式录制?

Posted

技术标签:

【中文标题】如何修改 SpeakHere 示例应用程序以在 iPhone 上以单声道格式录制?【英文标题】:How can I modify the SpeakHere sample app to record in mono format on iPhone? 【发布时间】:2011-03-10 05:28:24 【问题描述】:

我是 iPhone 新手。您能否帮我修改 Apple 的 SpeakHere 应用程序以录制单声道格式。我应该为mChannelsPerFrame 设置什么,我还应该设置什么?

我已经更改了一些部分以记录 linearPCM WAVE 格式。

这里是link 发言。

这是我认为他们允许我更改但我不太了解声音的内容:

void ChangeNumberChannels(UInt32 nChannels, bool interleaved)
                // alter an existing format
    
        Assert(IsPCM(), "ChangeNumberChannels only works for PCM formats");
        UInt32 wordSize = SampleWordSize(); // get this before changing ANYTHING
        if (wordSize == 0)
            wordSize = (mBitsPerChannel + 7) / 8;
        mChannelsPerFrame = nChannels;
        mFramesPerPacket = 1;
        if (interleaved) 
            mBytesPerPacket = mBytesPerFrame = nChannels * wordSize;
            mFormatFlags &= ~kAudioFormatFlagIsNonInterleaved;
         else 
            mBytesPerPacket = mBytesPerFrame = wordSize;
            mFormatFlags |= kAudioFormatFlagIsNonInterleaved;
        
    

【问题讨论】:

有必要使用音频队列吗?你看过 AVAudioFramework for AVAudioRecorder 吗? 【参考方案1】:

在 iPhone 上,您将只能以单声道录制。

您无需在 SpeakHere 示例中进行任何设置。它是自动完成的。比如AQRecorder::SetupAudioFormat:

size = sizeof(mRecordFormat.mChannelsPerFrame);
XThrowIfError(AudiosessionGetProperty(  kAudioSessionProperty_CurrentHardwareInputNumberChannels, 
                &size, 
                &mRecordFormat.mChannelsPerFrame), "couldn't get input channel count");

获取支持的硬件输入通道并将其设置为 ivar。在其他地方,缓冲区大小的计算会考虑到这一点。

【讨论】:

以上是关于如何修改 SpeakHere 示例应用程序以在 iPhone 上以单声道格式录制?的主要内容,如果未能解决你的问题,请参考以下文章

如何修改 Speak Here 示例代码来录制流式音频?

如何使用 Speakhere 示例中的 AQRecorder

iPhone SpeakHere 1 个通道上的示例录音

使用音频队列框架录制的数据格式

iPhone dev - AudioQueue 服务在后台录制

如何使用 Spring Boot 修改 HttpServletResponse 以在 json 中包含一些标准属性? [复制]