時間をかけて質問を読んでくれてありがとう!iOS - ストリームからオーディオを読み込んでオーディオを再生する方法
私はMultipeerConnectivityを使用してストリームを作成しました。オーディオをCMSampleBufferに記録し、そのバッファをUInt8データに変換することができました。そして、この方法を使用してピアにそのデータを送信します。データはInputStreamの上に示したときに
outputStream!.write(u8ptr, maxLength: Int(buffer.mDataByteSize))
は、その後、次のメソッドが呼び出されます。
func stream(_ aStream: Stream, handle eventCode: Stream.Event) {
私はprint文を持っているので、この部分が実行されています良い。データが実際に現れたとき、私は私が実際にストリームから読み取るためにinputStream.readメソッドを呼び出す必要があることを知っているが、私は実際にそのデータを読み込み、するかどうかはわかりません
func readFromStream() {
私の関数を呼び出しますAVAudioPlayerを使用して再生できるようにNSDataに変換します。
(あなたがより良い、より効率的な方法を知っている場合を除き)
これは私がこれまで持っているものですが、私はそれをテストしていないと私は問題があるように起こっていると仮定します。
func readFromStream() {
var buffer = [UInt8](repeating: 0, count: 1024)
while (inputStream!.hasBytesAvailable) {
let length = inputStream!.read(&buffer, maxLength: buffer.count)
if (length > 0) {
if (audioEngine!.isRunning) {
audioEngine!.stop()
audioEngine!.reset()
}
print("\(#file) > \(#function) > \(length) bytes read")
let audioBuffer = bytesToAudioBuffer(buffer)
let mainMixer = audioEngine!.mainMixerNode
audioEngine!.connect(audioPlayer!, to: mainMixer, format: audioBuffer.format)
audioPlayer!.scheduleBuffer(audioBuffer, completionHandler: nil)
do {
try audioEngine!.start()
}
catch let error as NSError {
print("\(#file) > \(#function) > error: \(error.localizedDescription)")
}
audioPlayer!.play()
}
}
}
私の考えに基づいて、オーディオは再生されません。それは沈黙ですが、オーディオがデバイスの1つで受信されていることがわかります。
基本的に私の質問は、このバッファを正しいデータ型に変換してライブで再生できるようにすることです。
ありがとうございました!詳しい情報が必要な場合は、私に知らせてください。 NSDataのにUINT8を変換するには