Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Проигрывание большого файла

Проигрывание большого файла

Поделиться
DIMOSUS.XПостоялецwww2 июня 201710:25#0
Подскажите — как работать с большим звуковым файлом на десятки часов звучания (wma, mp3), если мне нужно эпизодически проигрывать отдельные его фрагменты? Не хотелось бы постоянно держать его в памяти, отъедая гигабайт места.
Использую XAudio2.
DimichПостоялецwww2 июня 201710:48#1
DIMOSUS.X
> Не хотелось бы постоянно держать его в памяти
Попробуй memory mapping.
DIMOSUS.XПостоялецwww2 июня 201710:59#2
Огромное спасибо, как-то даже не знал про такую вещь (пишу на C#, а там это появилось не так давно).
Есть ли какие-либо подводные камни с проигрывание файла с произвольной точки? Надеюсь для этого не нужно читать файл с самого начала? Или это еще от формата кодирования зависит?
eugenelozaПостоялецwww2 июня 201714:15#3
DIMOSUS.X
> Или это еще от формата кодирования зависит?
Constant bitrate не зависит (почти), Variable bitrate - скорее всего нужно будет читать с начала (может получиться сделать какую-то карту файла заранее для оптимизации процесса).
DIMOSUS.X
> эпизодически проигрывать отдельные его фрагменты?
Не лучше ли разбить файл на несколько мелких?
exchgПостоялецwww2 июня 201714:25#4
DIMOSUS.X
> Надеюсь для этого не нужно читать файл с самого начала? Или это еще от формата
> кодирования зависит?
Зависит от формата, но обычно вставляют опорные точки, чтобы можно было читать с условно
произвольного момента.
DIMOSUS.XПостоялецwww2 июня 201714:28#5
eugeneloza
> Не лучше ли разбить файл на несколько мелких?
>
Конечно лучше, но пытаюсь использовать готовый файл озвучки от одной игры. Там цельный WMA файл на десятки часов — очень хочется узнать, как они это реализовали.
BUzerУчастникwww2 июня 201716:43#6
Никто же заставляет загружать весь файл в память целиком. Просто делаешь fread (или какая там у тебя стандартная функция чтения файла на том, что ты пишешь) порциями по мере проигрывания, декодируешь, и складируешь в буфера, которые устройство воспроизведения по очереди кушает.
andreyuПостоялецwww6 июня 201713:58#7
Про шарп ничего не скажу, а в си делают так:
#include <sys/mman.h>
void* mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);

/ Форум / Программирование игр / Звук

2001—2017 © GameDev.ru — Разработка игр