#dart #ffmpeg #stream #waveform #uint16
Вопрос:
Я пытаюсь получить форму сигнала из MP3-файла с помощью flutter_ffmpeg: ^0.4.2
.
Как рекомендуется здесь, я выполняю следующую команду:
-i songPath.mp3 -ac 1 -filter:a aresample=10 -map 0:a -c:a pcm_s16le -f data - songPath.waveform
Это создает двоичный файл с именем «songPath.waveform», который содержит 10 выборок в секунду, представленных 16-разрядными целыми числами. Мне нужно извлечь из этого двоичного файла a, List<int>
чтобы легко нарисовать форму сигнала в моем приложении.
Есть какие-нибудь предложения? Это может закончиться чем-то вроде:
Stream<int> waveform = File("songPath.waveform").openRead().transform(uint16.decoder);
Сейчас я борюсь с чем-то вроде:
Stream<int> waveform = File("songPath.waveform").openRead().transform(
StreamTransformer<List<int>, int>.fromHandlers(
handleData: (List<int> event, EventSink<int> output) {
print("event: $event");
ByteData bytes = ByteData.view(Uint64List.fromList(event).buffer);
print("bytes: $bytes");
int readSampleNumber = bytes.lengthInBytes~/16;
print("readSampleNumber: ${bytes.lengthInBytes/16}");
for (var i = 0; i <= readSampleNumber-1; i ){
output.add(bytes.getInt16(i));
}
}
)