Dziękuję wszystkim, którzy poświęcają czas na przeczytanie tego pytania!iOS - Jak odczytać dźwięk ze strumienia i odtwarzać dźwięk
Więc zrobiłem strumień przy użyciu MultipeerConnectivity. Mogę nagrać audio do CMSampleBuffer i przekonwertować ten bufor na dane UInt8. Następnie wysłać te dane do równorzędnego stosując metodę:
outputStream!.write(u8ptr, maxLength: Int(buffer.mDataByteSize))
wtedy, gdy dane pokazuje się na InputStream następująca metoda nazywa się:
func stream(_ aStream: Stream, handle eventCode: Stream.Event) {
mam instrukcje print, więc ta część jest uruchomiony w porządku. Gdy dane rzeczywiście pojawia się wzywam moja funkcja
func readFromStream() {
wiem, że muszę wywołać metodę inputStream.read faktycznie czytać ze strumienia, ale nie jestem pewien, jak właściwie odczytać dane, a następnie przekonwertuj go na NSData, aby można go było odtwarzać za pomocą AVAudioPlayer.
(Chyba, że jesteś świadomy lepszego, bardziej efektywny sposób)
To, co mam tak daleko, ale nie testowałem go i zakładamy, że nie będzie problemów.
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()
}
}
}
Na podstawie posiadanych danych nie ma dźwięku. To jest cisza, ale widzę, że dźwięk jest odbierany przez jedno z urządzeń.
Moje pytanie brzmi: jak przekonwertować ten bufor na właściwy typ danych, aby można było go odtwarzać na żywo?
Dziękuję za pomoc! Jeśli potrzebujesz więcej informacji, daj mi znać.