私はSwiftプログラミングにはとても新しいので、私を許してください。 私がしようとしているのは、ボイスレコーディングをしようとしているところです。以下は、iPhoneのマイクからストリームを取得する方法です。私は、このメソッドを使用してデバイス内のWAVファイルにストリームを保存するのに成功しています。私は、ファイルがOKであることを確認しにデータを変換し、Swift 3オーディオストリームを取得する
osErr = ExtAudioFileWrite(destinationFile!, frameCount, inputDataList)
何私は、オーディオストリームをキャプチャしていることに失敗しています、base64でエンコードされたデータとしてWKWebviewにストリームを渡す記録した後、罰金を再生していますBlobはHTML5 AudioタグのソースとしてBlobを渡します。
オーディオ要素はエラーをスローし、ブロブは再生しません。私は私のコードのsendAudioBufferの部分に私が渡す必要がある正しいデータを取得しているかどうかは分かりません。
私は実際に情報に感謝しています。私は、この方法は、BLOBに データを変換...
https://gist.github.com/hotpaw2/ba815fc23b5d642705f2b1dedfaf0107
func processMicrophoneBuffer(inputDataList: UnsafeMutablePointer<AudioBufferList>, frameCount : UInt32) {
let inputDataPtr = UnsafeMutableAudioBufferListPointer(inputDataList)
let mBuffers : AudioBuffer = inputDataPtr[0]
let count = Int(frameCount)
let bufferPointer = UnsafeMutableRawPointer(mBuffers.mData)
if let bptr = bufferPointer {
let dataArray = bptr.assumingMemoryBound(to: Float.self)
var sum : Float = 0.0
var j = self.circInIdx
let m = self.circBuffSize
for i in 0..<(count/2) {
let x = Float(dataArray[i+i ]) // copy left channel sample
let y = Float(dataArray[i+i+1]) // copy right channel sample
self.circBuffer[j ] = x
self.circBuffer[j + 1] = y
j += 2 ; if j >= m { j = 0 } // into circular buffer
sum += x * x + y * y
}
self.circInIdx = j // circular index will always be less than size
if sum > 0.0 && count > 0 {
let tmp = 5.0 * (logf(sum/Float(count)) + 20.0)
let r : Float = 0.2
audioLevel = r * tmp + (1.0 - r) * audioLevel
}
}
//This will write to a file
osErr = ExtAudioFileWrite(destinationFile!, frameCount, inputDataList)
//This will get the audio stream and send to WKWebview to be converted to Blob
sendAudioBuffer(buffer: Data(bytes: bufferPointer!, count: count))
}
JavaScriptで 'blob'とは何ですか? – guest271314
'Audio要素だけでError'がスローされます...あなたの質問にエラーテキストを追加してください。 –