Невозможно воспроизвести локальный аудиофайл mp3 с AVAudioPlayer - PullRequest
0 голосов
/ 22 мая 2019

Я хочу скачать и воспроизвести звук из Google Translate (Текст в речь).

Файл mp3 успешно загружен.Я пытался воспроизвести его с помощью AVAudioPlayer, но на симуляторе и моем реальном iPhone нет звука

Я использую XCode 10.2.1, Swift 5. Тест на симуляторе (XSMax) и iPhone XSMax

import UIKit
import AVFoundation

class TextToSpeechGoogleTranslate: AVAudioPlayer, AVAudioPlayerDelegate {
  var player: AVAudioPlayer?

  func speak() {
    let fileURL = URL(string: "https://translate.google.com/translate_tts?ie=UTF-8&total=1&idx=0&client=tw-ob&tl=vi&q=Hello" )!

    let documentsUrl:URL =  (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first as URL?)!
    let destinationFileUrl = documentsUrl.appendingPathComponent("voice.mp3")

    let sessionConfig = URLSessionConfiguration.default
    let session = URLSession(configuration: sessionConfig)

    let request = URLRequest(url:fileURL)

    let task = session.downloadTask(with: request) { (tempLocalUrl, response, error) in
        if let tempLocalUrl = tempLocalUrl, error == nil {

            if let statusCode = (response as? HTTPURLResponse)?.statusCode {
                print("Successfully downloaded. Status code: \(statusCode)")
            }

            do {
                try? FileManager.default.removeItem(at: destinationFileUrl)
                try FileManager.default.copyItem(at: tempLocalUrl, to: destinationFileUrl)
                print(destinationFileUrl)

                do {
                    self.player = try AVAudioPlayer(contentsOf: destinationFileUrl)
                    self.player!.delegate = self
                    self.player!.prepareToPlay()
                    self.player!.volume = 1.0
                    self.player!.play()

                }
                catch let error as NSError {
                    print("Error: \(error.localizedDescription)")
                }
                catch {
                    print("AVAudioPlayer init failed")
                }


            } catch (let writeError) {
                print("Error creating a file \(destinationFileUrl) : \(writeError)")
            }

        } else {
            print("Error took place while downloading a file. Error description: %@", error?.localizedDescription as Any);
        }
    }
    task.resume()
  }
 }

Вывод: успешно загружен.Код статуса: 200 файл: /// Пользователи / macbook / Библиотека / Разработчик / CoreSimulator / Устройства / F43F9B03-674C-4EE1-8CAD-01B5145868DE / данные / Контейнеры / Данные / Приложение / 6D1A3310-386D-4706-9F1E-DFF536B2A43F / Documents/voice.mp3

Я проиграл этот файл в Finder.Все в порядке.

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Я только что попробовал ваш код, и он, кажется, работает нормально.Возможно, проблема в том, как вы создаете объект TextToSpeechGoogleTranslate и вызываете speak() для него.Например, вот что я попробовал:

class ViewController: UIViewController {

    var test: TextToSpeechGoogleTranslate?

    override func viewDidLoad() {
        super.viewDidLoad()

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

Если это не поможет, вы можете опубликовать код, показывающий, как вы вызываете этот метод?

0 голосов
/ 22 мая 2019

импорт UIKit импорт AVFoundation

класс ViewController: UIViewController, AVAudioPlayerDelegate {

var audioPlayer = TextToSpeechGoogleTranslate()

override func viewDidLoad() {
    super.viewDidLoad()

    audioPlayer.delegate = self
    audioPlayer!.speak()
}

}

1) создать экземпляр вашего класса 2) Подтвердите, что это делегат 3) вызовите свою функцию после получения ваших данных 4) при тестировании с устройства не забудьте отключить режим тишины (увеличение громкости)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...