Guest User

Untitled

a guest
Feb 14th, 2025
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.97 KB | None | 0 0
  1.     private func decodeAudioData(_ data: Data) -> AVAudioPCMBuffer? {
  2.         guard let inputFormat = inputFormat else {
  3.             NSLog("Error: Audio format is nil")
  4.             return nil
  5.         }
  6.        
  7.         var mp3StreamDescription = AudioStreamBasicDescription(
  8.             mSampleRate: 44100,
  9.             mFormatID: kAudioFormatMPEGLayer3,
  10.             mFormatFlags: 0,
  11.             mBytesPerPacket: 0,
  12.             mFramesPerPacket: 1152,
  13.             mBytesPerFrame: 0,
  14.             mChannelsPerFrame: 2,
  15.             mBitsPerChannel: 0,
  16.             mReserved: 0
  17.         )
  18.  
  19.         guard let mp3Format = AVAudioFormat(streamDescription: &mp3StreamDescription) else {
  20.             fatalError("❌ Failed to create MP3 format")
  21.         }
  22.         let compressedBuffer = AVAudioCompressedBuffer(format: mp3Format,  packetCapacity: 1, maximumPacketSize: data.count);
  23.        
  24.         data.copyBytes(to: compressedBuffer.data.assumingMemoryBound(to: UInt8.self), count: data.count)
  25.        
  26.         compressedBuffer.packetCount = 1
  27.        
  28.         print(compressedBuffer, data)
  29.  
  30.         let frameCapacity = UInt32(outputFormat.sampleRate);
  31.         guard let pcmBuffer = AVAudioPCMBuffer(pcmFormat: outputFormat, frameCapacity: frameCapacity) else { return nil }
  32.        
  33.         guard let converter = AVAudioConverter(from: mp3Format, to: outputFormat) else {
  34.             fatalError("❌ Failed to create AVAudioConverter")
  35.         }
  36.  
  37.         let inputBlock: AVAudioConverterInputBlock = { inNumPackets, outStatus in
  38.             outStatus.pointee = .haveData
  39.             return compressedBuffer
  40.         }
  41.        
  42.         var error: NSError?
  43.         converter.convert(to: pcmBuffer, error: nil, withInputFrom: inputBlock);
  44.        
  45.  
  46.         if let error = error {
  47.             NSLog("❌ Conversion error: \(error.localizedDescription)")
  48.             return nil
  49.         }
  50.  
  51.         print("✅ Successfully decoded MP3 → PCM")
  52.         return pcmBuffer
  53.     }
Advertisement
Add Comment
Please, Sign In to add comment