- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在Apple提供的aurioTouch项目中,听说在performRender()函数下的AudioController文件中的AudioBufferList ioData携带了mic到音频播放器的音频数据?谁能证实这一点?这是代码:
// Render callback function
static OSStatus performRender (void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
OSStatus err = noErr;
if (*cd.audioChainIsBeingReconstructed == NO)
{
// we are calling AudioUnitRender on the input bus of AURemoteIO
// this will store the audio data captured by the microphone in ioData
err = AudioUnitRender(cd.rioUnit, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData);
// filter out the DC component of the signal
cd.dcRejectionFilter->ProcessInplace((Float32*) ioData->mBuffers[0].mData, inNumberFrames);
// based on the current display mode, copy the required data to the buffer manager
if (cd.bufferManager->GetDisplayMode() == aurioTouchDisplayModeOscilloscopeWaveform)
{
cd.bufferManager->CopyAudioDataToDrawBuffer((Float32*)ioData->mBuffers[0].mData, inNumberFrames);
}
else if ((cd.bufferManager->GetDisplayMode() == aurioTouchDisplayModeSpectrum) || (cd.bufferManager->GetDisplayMode() == aurioTouchDisplayModeOscilloscopeFFT))
{
if (cd.bufferManager->NeedsNewFFTData())
cd.bufferManager->CopyAudioDataToFFTInputBuffer((Float32*)ioData->mBuffers[0].mData, inNumberFrames);
}
// mute audio if needed
if (*cd.muteAudio)
{
for (UInt32 i=0; i<ioData->mNumberBuffers; ++i)
memset(ioData->mBuffers[i].mData, 0, ioData->mBuffers[i].mDataByteSize);
}
}
return err;
}
最佳答案
RemoteIO 音频单元是一个能够访问音频硬件输入(麦克风)和输出(扬声器)的组件。
输入从麦克风或缓冲区获取数据。输出将音频数据放入扬声器或缓冲器。
由于输入从麦克风获取数据,因此您可以随心所欲地使用它。您可以将其保存到文件中。您可以将其发送到网络流中。你可以把它留在内存中。
对于输出,音频输出设备和扬声器正在请求播放数据。
所以在您提供的软件中,他们所做的只是将麦克风连接到扬声器作为直接音频传递。
函数 performRender()
由音频系统定期调用,它说“给我一些音频样本来播放”。在该函数内部,它从以下行中的麦克风生成的数据中读取:AudioUnitRender(cd.rioUnit, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData);
您可以替换 performRender()
的内部并以编程方式制作您自己的音频数据,从文件或缓冲区读取等。他们所做的只是从麦克风数据中读取。
至于你问的AudioBufferList的用途。这只是提供了一个缓冲区列表,其中每个缓冲区都是一个 channel 。有时,根据格式(单声道、立体声、立体声交错、混合器 channel 等)和设备类型,您有多个音频 channel 。
关于ios - AudioBufferList 的 AurioTouch 用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34525385/
我在 C 中有以下代码,它分配了一个具有适当长度的 AudioBufferList。 UInt32 bufferSizeBytes = bufferSizeFrames * sizeof(Floa
初始化(分配内存)和释放(释放)具有 3 个 AudioBuffers 的 AudioBufferList 的正确方法是什么? (我知道可能有不止一种方法可以做到这一点。) 我想使用这 3 个缓冲区将
我一直在尝试在正弦波生成项目上添加释放(或衰减)时间,采用 this例如作为地面。我基本上想要的不是声音被如此彻底地切断,并在停止生成声音时在最后添加一些释放。 我怎样才能实现它? 最佳答案 在您想要
我正在尝试将以下代码转换为 Swift: CMSampleBufferRef sampleBuffer = [assetOutput copyNextSampleBuffer]; CMBlockBuf
我在项目中使用EZAudio从麦克风读取音频数据。 EZAudio有2种麦克风方法: - (void)microphone:(EZMicrophone *)microphone hasBufferLi
我有一个附加到 AVPlayerItem 的 AudioTapProcessor。 这将调用static void tap_ProcessCallback(MTAudioProcessingTapRe
在Apple提供的aurioTouch项目中,听说在performRender()函数下的AudioController文件中的AudioBufferList ioData携带了mic到音频播放器的音
引用Using AudioBufferList with Swift 我在 Stack Overflow 上找到了以下解决方案,用于使用音频单元播放一些声音。我的问题是我无法像正弦波数据那样将实际数据
致谢 我知道这篇文章很长,但我尽量将我的问题放在上下文中,因为我认为它非常独特(除了 this one 之外找不到任何相关问题。最后一个问题在最后帖子和 here's the complete cod
我正在为这个 API 和 Swift 中的语法苦苦挣扎 audioBufferList = AudioBufferList(mNumberBuffers: 2, mBuffers: (AudioBuf
如果我使用以下客户端数据格式打开具有扩展音频文件服务的音频文件... AudioStreamBasicDescription audioFormat; memset(&audioFormat, 0,
我在 Swift 中有一个桥接函数,它在 C 中的参数之一是 AudioBufferList * .在 Swift 中,这会生成一个 UnsafePointer。 .我设法通过调用 audioData
我有一个带有渲染回调的 RemoteIO 音频单元。我已经有一个渲染音频缓冲区,出于性能原因,我想避免使用 memcpy。 OSStatus FMixerPlatformAudioUnit::Audi
我正在尝试将从音频单元获取的 AudioBufferList 转换为可以传递给 AVAssetWriter 的 CMSampleBuffer保存来自麦克风的音频。此转换有效,因为我为执行转换所做的调用
我一直致力于使用 AVAssetReader 读取音频 Assets ,以便稍后可以使用带有 AudioUnit 回调的 AUGraph 播放音频。我有 AUGraph 和 AudioUnit 回调工
我正在尝试使用 AVAssetReader 读取视频文件并将音频传递给 CoreAudio 进行处理(添加效果和内容),然后再使用 AVAssetWriter 将其保存回磁盘。我想指出的是,如果我将输
我正在使用 AudioConverter转换未压缩 CMSampleBuffer通过 AVCaptureSession 被捕获至 AudioBufferList : let status: OSSta
使用 Xcode/Cocoa 和 ExtAudioFile API,我尝试存储 AudioBufferList* 对象以供以后使用,但我在重新访问数据时遇到了麻烦。这些对象来自重复的 ExtAudio
我有一个录音机回调 (kAudioOutputUnit_SetInputCallback),我需要在其中分配 AudioBufferList 中的缓冲区,其中只有一个回调返回的信息 inNUmberF
我正在尝试从呈现的 AudioBufferList 中提取 native [Float] 数组,其中音频单元的流设置为 32 位浮点。在 Swift 1 和 2 中,我这样做了: var mo
我是一名优秀的程序员,十分优秀!