【问题标题】:How can I modify the SpeakHere sample app to record in mono format on iPhone?如何修改 SpeakHere 示例应用程序以在 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 吗?

标签: objective-c ios4 audio-recording audioqueue


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多