Имя пользователя:
Пароль:
 

Название темы: Delphi, wav
Показать сообщение отдельно

Старожил


Сообщения: 225
Благодарности: 0

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
  while not eof(f) do
   begin
    blockread(f,buf,sizeof(buf));
    setLength(data, length(data)+1);
    data[i]:=buf;
    inc(i);
   end;

  closefile(f);
Вот этот кусочек кода читает данные, чтение начинается сразу после индификатора data (+4 байта отведенных под размер области данных).
Читает, то он читает и даже рисунок похожий получается, но данные я читаю не те, дело в том что у меня есть программка читающая wav файлы и если я открываю один и тот же файл своей программкой и ей я получаю разные результаты.
Число каналов - 1, Число байт для представления одного отсчета - 2, разрядность - 16. Это параметры файла на котором я эксперементирую, дело в том что не один из них я не учитываю, ибо не знаю как это сделать.
Цитата:
Число байт для представления одного отсчета - 2
А я читаю по четыре байта, а если читаю по 2 то получаю абсолютно неправильный результат. К тому же мой код дает ровно половину от тех значений, которые записанны в файле
как учесть при чтение разрядность, число байт для чтения, число каналов...


Добавлено:

Что такое полное слово? Как прочитать старший и младший байт, и вообще имеет ли это какое-либо отношение к тому что я пытаюсь сделать?

Добавлено:

Цитата:
Формат звуковых данных с дискретностью 16 бит выглядит аналогично. Для монофонического сигнала данные хранятся в массиве 16-битовых слов.
Один байт - 8 бит, а я таки читаю по четыре байта.
Цитата:
Для стерео-фонического используется массив двойных слов, причем младшему слову соот-ветствует левый канал, а старшему - правый.

-------
Нет такой плохой ситуации, которая не могла бы стать еще хуже.


Отправлено: 06:23, 17-02-2003 | #13

Название темы: Delphi, wav