- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我在 Swift 中有一个桥接函数,它在 C 中的参数之一是 AudioBufferList *
.在 Swift 中,这会生成一个 UnsafePointer<AudioBufferList>
。 .我设法通过调用 audioData[0]
来引用指针(有没有更好的办法?)。但我正在为接下来的两层而苦苦挣扎:.mBuffers
AudioBuffer
的数组的和他们的 void *
/UnsafePointer<()>
.mData
成员。
在 C 中它只是
Float32 *audioData = (Float 32*)abl->mBuffers[0]->mData;
output = audioData[sampleNum]...
在 Swift 中,第一个奇怪的事情是它不允许我访问 mBuffers
的元素。但是当我将它作为属性(property)访问时,我非常高兴。换句话说,这有效,甚至有正确的数据(我认为是 mBuffers
的第一个成员)...
println(abl[0].mBuffers.mNumberChannels) // But .mBuffers should be an []!
其次,它让我打印出 .mData
下标,但值始终为 ()
println(abl[0].mBuffers.mData[10]) // Prints '()'
我尝试了各种转换操作并使用多个索引进行访问,但无济于事……有什么想法吗?
这里是 AudioBufferList
的 C 和 Swift 定义和 AudioBuffer
为了方便...
// C
struct AudioBufferList
{
UInt32 mNumberBuffers;
AudioBuffer mBuffers[1]; // this is a variable length array of mNumberBuffers elements
// ...and a bit more for c++
}
struct AudioBuffer
{
UInt32 mNumberChannels;
UInt32 mDataByteSize;
void* mData;
};
...
// SWIFT
struct AudioBufferList {
var mNumberBuffers: UInt32
var mBuffers: (AudioBuffer)
}
struct AudioBuffer {
var mNumberChannels: UInt32
var mDataByteSize: UInt32
var mData: UnsafePointer<()>
}
最佳答案
这是我无意中发现的。奇怪的是,当它建议使用 UnsafeMutableAudioBufferListPointer 时,前面的类型实际上是在与 Swift 一起工作。您可以使用 UnsafeMutablePointer 参数对其进行初始化。此类型是 MutableCollectionType,并提供对包含的音频缓冲区的下标和生成器访问。
例如,您可以使用以下代码将 ABL 设置为静音
func renderCallback(ioData: UnsafeMutablePointer<AudioBufferList>) -> OSStatus {
let abl = UnsafeMutableAudioBufferListPointer(ioData)
for buffer in abl {
memset(buffer.mData, 0, Int(buffer.mDataByteSize))
}
return noErr
}
关于ios - 在 Swift 中使用 AudioBufferList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24838106/
我在 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
我是一名优秀的程序员,十分优秀!