- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
Apple 的文档:
AudioToolbox 框架引用 > 音频文件服务引用 > 读写音频文件 > AudioFileWriteBytes
Declaration Swift func AudioFileWriteBytes(_ inAudioFile: AudioFileID,
_ inUseCache: Boolean,
_ inStartingByte: Int64,
_ ioNumBytes: UnsafeMutablePointer<UInt32>,
_ inBuffer: UnsafePointer<Void>) -> OSStatus
XCode 版本 7.0 beta 4 (7A165t) 中的代码
audioErr = AudioFileWriteBytes(audioFile, false, Int64(sampleCount * 2), bytesToWriteMem, sampleMem as! UnsafePointer<Void>)
XCode 的响应:
Cannot invoke 'AudioFileWriteBytes' with an argument list of type '(AudioFileID, Bool, Int64, UnsafeMutablePointer<UInt32>, UnsafePointer<Void>)'
有什么想法吗?
编辑:感谢 Martin R 的回复,这是我的完整代码,我不明白为什么 AudioFileWriteBytes 调用会返回错误...:
import Foundation
import AudioToolbox
import Darwin
import AudioUnit
import CoreFoundation
extension Int {
func format (f:String) -> String {
return NSString(format:"%\(f)d", self) as String
}
}
let SAMPLE_RATE:Float64 = 44100 // 1
let DURATION = 0.1 // 2
// #define FILENAME_FORMAT @"%0.3f-square.aif" 3 skipped
if (Process.arguments.count < 2) {
print("Usage: CAToneFileGenerator n\n(where n is tone in Hz)")
exit(0)
}
var hz:Double = atof(Process.arguments[1]) // 4 (atof convert ASCII string to double)
assert(hz > 0)
print("generating \(hz) tone")
var fileName:String = String(format:"%d-square.aif", hz) // 5
var filePath:String = NSFileManager.defaultManager().currentDirectoryPath.stringByAppendingPathComponent(fileName)
var fileURL:NSURL = NSURL.fileURLWithPath(filePath) // the Audio File Services functions take URLs, not file paths
// Prepare the format
var asbd = AudioStreamBasicDescription() // 6
memset(&asbd, 0, sizeof(AudioStreamBasicDescription)) // 7
asbd.mSampleRate = SAMPLE_RATE // 8
asbd.mFormatID = AudioFormatID(kAudioFormatLinearPCM)
asbd.mFormatFlags = AudioFormatFlags(kAudioFormatFlagIsBigEndian | kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked)
asbd.mBitsPerChannel = 16
asbd.mChannelsPerFrame = 1
asbd.mFramesPerPacket = 1
asbd.mBytesPerFrame = 2
asbd.mBytesPerPacket = 2
// Set up the file
var audioFile:AudioFileID = AudioFileID()
var audioErr:OSStatus = noErr
audioErr = AudioFileCreateWithURL(fileURL, // 9
AudioFileTypeID(kAudioFileAIFFType),
&asbd,
.EraseFile,
&audioFile)
// 1 -> AudioFileFlags(kAudioFileFlags_EraseFile)
assert(audioErr == noErr)
// Start writing samples
var maxSampleCount:CLong = CLong(SAMPLE_RATE * DURATION) // 10
var sampleCount:CLong = 0
var bytesToWrite:UInt32 = 2
/*
var bytesToWriteMem = UnsafeMutablePointer<UInt32>.alloc(1)
bytesToWriteMem.initialize(bytesToWrite)
*/
var wavelengthInSamples:Double = SAMPLE_RATE / hz // 11
var sample:UInt16
//var sampleMem = UnsafeMutablePointer<UInt16>.alloc(1)
//sampleMem.initialize(sample)
while sampleCount < maxSampleCount {
for i in 0..<Int(wavelengthInSamples) {
// Square wave
if ( i < Int(wavelengthInSamples/2)) { // 12
sample = UInt16.max // 13
} else {
sample = UInt16.min
}
//let bytesToWrite2 = bytesToWrite
audioErr = AudioFileWriteBytes(audioFile, // 14
false,
Int64(sampleCount * 2),
&bytesToWrite, //UnsafeMutablePointer<UInt32>
&sample) //UnsafePointer<Void>
assert(audioErr == noErr)
sampleCount++ // 15
}
}
/*
bytesToWriteMem.destroy()
bytesToWriteMem.dealloc(1)
sampleMem.destroy()
sampleMem.dealloc(1)
*/
audioErr = AudioFileClose(audioFile) // 16
assert(audioErr == noErr)
print("wrote \(sampleCount) samples")
最佳答案
这很难找到,因为错误消息根本没有帮助。问题是AudioFileWriteBytes()
的第二个参数的类型是Boolean
,不是Bool
:
audioErr = AudioFileWriteBytes(audioFile,
Boolean(0), // <--- HERE
Int64(sampleCount * 2),
&bytesToWrite,
&sample)
有关 Boolean
和 Bool
之间区别的更多信息参见例如 Type 'Boolean' does not conform to protocol 'BooleanType' .
更新从 Swift 2/Xcode 7 开始,Mac 类型 Boolean
被映射到 Swift Bool
,所以你现在必须传递 false
或 true
:
audioErr = AudioFileWriteBytes(audioFile,
false, // <--- HERE
Int64(sampleCount * 2),
&bytesToWrite,
&sample)
关于xcode - AudioToolbox/AudioUnits (AudioFileWriteBytes) 在 Swift 中不可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31771696/
我有两个使用 audiotoolbox 框架来播放短 mp3 文件的应用程序。部署目标是:4.0基础SDK为:iOS 5.0 SDK 我有一台运行 iOS 5.0 的 iPhone 4 和一台运行 i
我最近一直在为 iOS 开发一个非常具体的项目,我的研究使我几乎完成了最终代码。我已经解决了到目前为止我发现的所有极端困难,但是在这个问题上我似乎没有任何线索(关于解决它的原因和可能性)。 我设置了我
我想实现一个音频管理器。但是我遇到了内存泄漏。我不知道为什么和会发生什么。有人可以帮助我吗? 我创建了一个按钮,按钮事件只运行带有音频路径的 playAudio。然后,我单击按钮,单击,单击,单击,.
我对 AUAudioFilePlayer 的以下属性感到困惑。 Apple 的文档充其量是令人困惑的: kAudioUnitProperty_ScheduleStartTimeStamp kAudio
当我使用 AudioToolBox 播放音乐时,内存泄漏严重。 AVAudioPlayer *newMusicPlayer = [[AVAudioPlayer alloc] initWithData:
我使用 OpenAL 在我的应用程序中播放声音。当我使用 Instruments 工具测试它时,它发现了泄漏: LeakedObject = GeneralBlock-512 大小 = 512 字节
我正在尝试在OS X上构建Ardour。我成功运行了./waf configure,但是尝试使用./waf进行编译会导致在尝试#include文件时找不到大量文件: ../libs/appleutil
我想用我的 iPhone 录制音频信号,然后我想逐一访问该信号的样本。我在网上找到了一些类似的例子,但我从未找到一个例子(在 Swift 中)来实际读取和操作所有原始样本。我怎样才能使用 Swift
我正在尝试使用 AudioToolbox API 使用 Swift 2.0 和 Xcode 7b6。 API 使用了大量的 C 语言结构,包括函数指针。这是我第一次使用像 withUnsafeMuta
我想在我的应用程序启动时播放音频,但首先,音频无法播放!不管我怎么编码。其次,如果可以的话,我很想循环播放它。 @implementation ViewController -(void)awakeF
我目前正在使用 OpenAL 播放游戏音乐。它工作正常,除了它不适用于原始 WAV 文件之外的任何东西。这意味着我最终得到了大约 9mb 的配乐。 我是 OpenAL 的新手,我直接使用来自 Appl
我有两种不同的按钮按下声音 Action 。当我按下一个按钮时,它应该播放一种声音,当我按下另一个按钮时,它应该停止第一种声音并播放另一种声音,我该怎么做? 谢谢, -(void) onButtonP
所以我尝试将 AudioToolbox 与 RubyMotion 一起使用, 1、添加 app.frameworks << 'AudioToolbox' 在 Rakefile 中, 2、在我的一个简单
AVAudioPlayer 对象是否存在内存引导问题?在模拟器中使用 AVAudioPlayer 时出现内存泄漏。我如何创建 AVAudioPlayer 并不重要。我使用了 initWithConte
我发现了一个使用工具箱播放声音的功能,创建它的人获得了荣誉: -(SystemSoundID) createSoundID: (NSString*)name { NSString *path
我正在尝试运行现有应用程序以查看它与最新 Xcode 测试版的配合情况,并尝试在现有项目中使用 SwiftUI。当我在模拟器上运行项目时,我得到以下运行时崩溃: dyld: Symbol not fo
我使用 AudioToolBox 框架中的 ExtAudioFileCreateWithURL 和 ExtAudioFileWrite 将样本保存到文件中。但现在我需要将其保存到 NSFileWrap
所以,我有以下类(class): 录音机(使用 AudioToolbox 和 CoreAudio )记录音频。 音频播放器(使用 AVFoundation ) 录音机捕获音频,将其发送到服务器,然后服
我正在尝试使用混音器和 io 单元创建音频图。 io 单元将从麦克风接收音频并将其发送到混音器,混音器会将其与外部声音混合,然后从扬声器播放。我已经创建了如下所示的音频图,并尝试尽可能地遵循指南。但是
Apple 的文档: AudioToolbox 框架引用 > 音频文件服务引用 > 读写音频文件 > AudioFileWriteBytes Declaration Swift func AudioF
我是一名优秀的程序员,十分优秀!