Using Avaudioplayer to Play Remote Mp3 File in Swift

Using AVAudioPlayer to play remote mp3 file in Swift

Try this code :

You need to add AVKit & AVFoundation to your frameworks path and import them :

import UIKit
import AVKit
import AVFoundation

class ViewController: UIViewController {

var player = AVPlayer()

override func viewDidLoad() {
super.viewDidLoad()
}

@IBAction func localPress(_ sender: Any) {
let path = Bundle.main.resourcePath!+"/sound.mp3"
print(path)
let url = URL(fileURLWithPath: path)

let playerItem = AVPlayerItem(url: url)
player = AVPlayer(playerItem: playerItem)
player.play()
}// i have created a btn for playing a local file, this is it's action

@IBAction func urlPressed(_ sender: Any) {

let playerItem = AVPlayerItem(url: URL(string: "https://yourURL.mp3")!)
player = AVPlayer(playerItem: playerItem)
player.play()
}// i have created another btn for playing a URL file, this is it's action

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}

How to play mp3 audio from URL in iOS Swift?

I tried the following:-

let urlstring = "http://radio.spainmedia.es/wp-content/uploads/2015/12/tailtoddle_lo4.mp3"
let url = NSURL(string: urlstring)
print("the url = \(url!)")
downloadFileFromURL(url!)

Add the below methods:-

func downloadFileFromURL(url:NSURL){

var downloadTask:NSURLSessionDownloadTask
downloadTask = NSURLSession.sharedSession().downloadTaskWithURL(url, completionHandler: { [weak self](URL, response, error) -> Void in
self?.play(URL)
})
downloadTask.resume()
}

And your play method as it is:-

func play(url:NSURL) {
print("playing \(url)")
do {
self.player = try AVAudioPlayer(contentsOfURL: url)
player.prepareToPlay()
player.volume = 1.0
player.play()
} catch let error as NSError {
//self.player = nil
print(error.localizedDescription)
} catch {
print("AVAudioPlayer init failed")
}
}

Download the mp3 file and then try to play it, somehow AVAudioPlayer does not download your mp3 file for you. I am able to download the audio file and player plays it.

Remember to add this in your info.plist since you are loading from a http source and you need the below to be set for iOS 9+

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
</plist>

how can i play remote .mp3 file in my ios application?

For steaming audio from a remote server, use AVPlayer instead of AVAudioPLayer.
AVPlayer Documentation

Sample Code:

- (void)playSampleSong:(NSString *)iSongName {
NSString *aSongURL = [NSString stringWithFormat:@"http://megdadhashem.wapego.ru/files/56727/tubidy_mp3_e2afc5.mp3"];
// NSLog(@"Song URL : %@", aSongURL);

AVPlayerItem *aPlayerItem = [[AVPlayerItem alloc] initWithURL:[NSURL URLWithString:aSongURL]];
AVPlayer *anAudioStreamer = [[AVPlayer alloc] initWithPlayerItem:aPlayerItem];
[anAudioStreamer play];

// Access Current Time
NSTimeInterval aCurrentTime = CMTimeGetSeconds(anAudioStreamer.currentTime);

// Access Duration
NSTimeInterval aDuration = CMTimeGetSeconds(anAudioStreamer.currentItem.asset.duration);
}

Can't play local audio mp3 file with AVAudioPlayer

I just tried your code and it seems to work fine. Maybe the problem is in how you create the TextToSpeechGoogleTranslate object and call speak() on it. For example, here is what I tried:

class ViewController: UIViewController {

var test: TextToSpeechGoogleTranslate?

override func viewDidLoad() {
super.viewDidLoad()

test = TextToSpeechGoogleTranslate()
test!.speak()
}
}

If that doesn't help, can you post some code showing how you call this method?

playing a url link instead of a .mp3 file in swiftui

You can use AVPlayer to stream resources from a URL like this. I'd also move the streaming/async logic into an ObservableObject:


class SoundManager : ObservableObject {
var audioPlayer: AVPlayer?

func playSound(sound: String){
if let url = URL(string: sound) {
self.audioPlayer = AVPlayer(url: url)
}
}
}

struct ContentView: View {
@State var song1 = false
@StateObject private var soundManager = SoundManager()

var body: some View {
Image(systemName: song1 ? "pause.circle.fill": "play.circle.fill")
.font(.system(size: 25))
.padding(.trailing)
.onTapGesture {
soundManager.playSound(sound: "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3")
song1.toggle()

if song1{
soundManager.audioPlayer?.play()
} else {
soundManager.audioPlayer?.pause()
}
}
}
}

Using AVAudioPlayer with Dynamic URL in Swift 3 causing Thread Errors

The problem is that you didn't save the mp3 file to documents and trying to play it

this line

    audioPlayer = try AVAudioPlayer(contentsOf: destinationUrl)

assumes that there is a saved mp3 file in that path , but acutally there is no files you appended the audio extension on the fly

besides for steaming audio from a remote server, use AVPlayer instead of AVAudioPLayer.
AVPlayer Documentation

Also try this with urls parsed from json

  var urlStr = (foo["audio"] as? String)!

self.audiotest = urlStr.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)


Related Topics



Leave a reply



Submit