Ошибка кеширования звука при воспроизведении в player.play

#flutter #dart

#флаттер #dart

Вопрос:

Привет, этот код прекрасно работает с Анжелой в моем курсе Flutter, ха-ха, но по какой-то причине player.play (‘notes1.wav’) не работает для меня .. советы? Я получаю эту ошибку..

ошибка: метод ‘play’ не определен для типа ‘Type’. (undefined_method в [xylophone] lib /main.dart:17)

 import 'package:flutter/material.dart';
import 'package:audioplayers/audio_cache.dart';

void main() => runApp(XylophoneApp());

class XylophoneApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: SafeArea(
          child: Center(
            child: FlatButton(
              onPressed: () {
                final player = AudioCache;
                player.play('note1.wav');
              },
              child: Text('Click Me'),
            ),
          ),
        ),
      ),
    );
  }
}
  

Ответ №1:

Я работаю над тем же курсом! В объявлении AudioCache отсутствуют открывающие / закрывающие скобки. Это должно быть:

   final player = AudioCache();
  

Я бы также сделал это для воспроизведения звука, так как он перестанет издавать звук после нажатия нескольких кнопок:

     player.play('note$note.wav',
      mode: PlayerMode.LOW_LATENCY, 
      stayAwake: false);
  

Это лучше, чем исходный код, но не идеально. Я думаю, что есть аудиоканалы 32, которые довольно быстро используются — изменение about, похоже, освобождает их немного быстрее. Удачи с остальной частью курса!

Ответ №2:

Руководство по миграции

зависимости: аудиоплейеры: ^ 0.x.x

Для

зависимости: аудиоплееры: ^ 1.0.1

https://github.com/bluefireteam/audioplayers/blob/main/migration_guide.md

введите описание изображения здесь

AudioCache мертв, да здравствуют источники Одним из основных изменений было мое желание «убить» API AudioCache из-за огромной путаницы, которую это вызвало у пользователей (несмотря на все наши усилия, документирующие все).

У нас все еще есть класс AudioCache, но его API предназначены исключительно для преобразования файлов ресурсов в локальные файлы, их кэширования и предоставления пути. Однако конечным пользователям обычно не требуется использовать его, поскольку сам аудиопроигрыватель теперь способен воспроизводить звук из любого источника.

Что такое источник? Это закрытый класс, который может быть одним из:

UrlSource: получение аудио с удаленного URL-адреса из Интернет-DeviceFileSource: доступ к файлу на устройстве пользователя, возможно, выбранному средством выбора файлов assetSource: воспроизведение ресурса, входящего в комплект вашего приложения, обычно в каталоге ресурсов BytesSource (только на некоторых платформах): передача байтов вашего аудио напрямую (прочитайте его из любого места). Если вы используете assetSource, аудиопроигрыватель будет автоматически использовать свой экземпляр AudioCache (который по умолчанию используется для глобального кэша, если он не изменен). Это объединяет все API-интерфейсы воспроизведения в AudioPlayer и полностью удаляет детали AudioCache для большинства пользователей.

Ответ №3:

Кеширование звука устарело, попробуйте это

 import 'package:audioplayers/audioplayers.dart';

final player = AudioPlayer();

player.play(AssetSource('note1.wav'));
  

Ответ №4:

AudioCache устарел. Теперь это не будет работать. Вместо этого используйте этот код:

 child: TextButton(
  onPressed: () async {
    final player = AudioPlayer();
    await player.play(
      AssetSource('note1.wav'),
    );
  },
  child: Text("Play me"),
),