Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Мультимедиа
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.08.2012, 13:17
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию Создание нового Wav - файла, используя заголовок другого

Помогите пожалуйста! Я задумал проект: надо полностью считать все о любом WAV файле (заголовок, сами данные), а потом записать их в новый, мною созданный wav. И в результате исходный и новый wav должны быть идентичными (проигрывать одинаковый звук). Вот у меня, собственно вопрос: как это сделать. Пока что я могу ПОЛНОСТЬЮ считать заголовок wav, но без его данных (это, вроде, после 44 байта файла wav). Прошу помощи у ВАС, так как я перерыл весь интернет, но нигде не описан процесс считывания самих данных wav и тем более записи нового, используя всю информацию исходного. Умоляю, помогите!!! Скачать мою текущую программу можете по ссылке http://narod.ru/disk/59011287001.477...20WAV.rar.html или в прикрепленном файле ниже.
Вложения
Тип файла: rar Read inf From WAV.rar (596.4 Кбайт, 14 просмотров)

Последний раз редактировалось Dmitry_DM, 14.08.2012 в 16:11.
Ответить с цитированием
  #2  
Старый 07.08.2012, 16:32
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Dmitry_DM
Помогите пожалуйста! Задали такую задачу: надо полностью считать все о любом WAV файле (заголовок, сами данные), а потом записать их в новый, мною созданный wav. И в результате исходный и новый wav должны быть идентичными (проигрывать одинаковый звук). Вот у меня, собственно вопрос: как это сделать. Пока что я могу ПОЛНОСТЬЮ считать заголовок wav, но без его данных (это, вроде, после 44 байта файла wav). Прошу помощи у ВАС, так как я перерыл весь интернет, но нигде не описан процесс считывания самих данных wav и тем более записи нового, используя всю информацию исходного. Умоляю, помогите!!! Скачать мою текущую программу можете по ссылке http://narod.ru/disk/59011287001.477...20WAV.rar.html или в прикрепленном файле ниже.
Что-то я не сильно понял зачем нужны сложности с чтением заголовка wav-файла, если "в результате исходный и новый wav должны быть идентичными"? Может просто скопировать?
Ответить с цитированием
  #3  
Старый 07.08.2012, 17:01
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от poli-smen
Что-то я не сильно понял зачем нужны сложности с чтением заголовка wav-файла, если "в результате исходный и новый wav должны быть идентичными"? Может просто скопировать?
Нет, ну мне не так важно именно копирование, как знать то, что данные считываються правильно. А программа создания мне тоже нужна, так как в моем проекте по плану зашифровать данные, после - записать их в новый файл. Дальше мне мой научный наставник еще не объяснял. Ну в общем помогите! Я вас очень прошу, добавте к моей программе функцию считывания данных, после заголовка. И хоть что нибудь расскажите о программном созданием wav файла, без всяких микрофонов, только используя данные.
Ответить с цитированием
  #4  
Старый 07.08.2012, 17:15
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Dmitry_DM
Нет, ну мне не так важно именно копирование, как знать то, что данные считываються правильно. А программа создания мне тоже нужна, так как в моем проекте по плану зашифровать данные, после - записать их в новый файл. Дальше мне мой научный наставник еще не объяснял. Ну в общем помогите! Я вас очень прошу, добавте к моей программе функцию считывания данных, после заголовка. И хоть что нибудь расскажите о программном созданием wav файла, без всяких микрофонов, только используя данные.
Дело в том, что wav-файлы это просто контейнеры. Сами аудио-данные не хранятся в каком-то определённом формате, а зависят от того каким кодеком они сжаты. Т.е. плееры просто читают из заголовка чем кодированы аудио-данные и просто отдают эти данные соответствующему кодеку (если он конечно установлен в системе)
Ответить с цитированием
  #5  
Старый 07.08.2012, 17:19
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от poli-smen
Дело в том, что wav-файлы это просто контейнеры. Сами аудио-данные не хранятся в каком-то определённом формате, а зависят от того каким кодеком они сжаты. Т.е. плееры просто читают из заголовка чем кодированы аудио-данные и просто отдают эти данные соответствующему кодеку (если он конечно установлен в системе)
Получается я все считал? А все - это и есть заголовок? Вы смотрели мою программу? Там все данные считываются? А в общем спасибо! Вы меня немного просветили.
Ответить с цитированием
  #6  
Старый 07.08.2012, 17:28
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Dmitry_DM
Получается я все считал? А все - это и есть заголовок? Вы смотрели мою программу? Там все данные считываются? А в общем спасибо! Вы меня немного просветили.
Нет, программу ещё не смотрел. Посмотрю на досуге
Ответить с цитированием
  #7  
Старый 07.08.2012, 17:33
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от poli-smen
Нет, программу ещё не смотрел. Посмотрю на досуге
Так кроме заголовка wav файл больше ничего не содержит?
Ответить с цитированием
  #8  
Старый 07.08.2012, 17:44
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Dmitry_DM
Так кроме заголовка wav файл больше ничего не содержит?

Естественно, содержит. Иначе он не был бы такого размера.
Просто после заголовка можно считаывть "сырые" данные как есть, особенно, если тебе не надо разбирать, что же там на самом деле внутри.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Dmitry_DM (07.08.2012)
  #9  
Старый 07.08.2012, 17:50
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от lmikle
Естественно, содержит. Иначе он не был бы такого размера.
Просто после заголовка можно считаывть "сырые" данные как есть, особенно, если тебе не надо разбирать, что же там на самом деле внутри.
Вот! Я так с самого начала и думал. Вопрос лишь в том, как именно мне считать эти „сырые данные”. Как?
Ответить с цитированием
  #10  
Старый 07.08.2012, 18:35
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

TFileStream его методом ReadBuffer читать в буфер (кусками или сразу весь файл - как не жалко памяти и на сколько большой файл), начиная с места после заголовка и следя за IOError (когда уже в конце файла, а TFileStream читать просим), затем писать через WriteBuffer в другой файл (чтобы получился идентичный файл - записываем тот же заголовок), перед этим "извращаясь" с буфером как хочется или без извращений - один в один
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard
Ответить с цитированием
Этот пользователь сказал Спасибо cotseec за это полезное сообщение:
Dmitry_DM (07.08.2012)
  #11  
Старый 07.08.2012, 20:31
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от cotseec
TFileStream его методом ReadBuffer читать в буфер (кусками или сразу весь файл - как не жалко памяти и на сколько большой файл), начиная с места после заголовка и следя за IOError (когда уже в конце файла, а TFileStream читать просим), затем писать через WriteBuffer в другой файл (чтобы получился идентичный файл - записываем тот же заголовок), перед этим "извращаясь" с буфером как хочется или без извращений - один в один
Спасибо большое! Только хотелось бы по-подробнее и с кодом, если можно. Пожалуйста!
Ответить с цитированием
  #12  
Старый 07.08.2012, 20:41
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

И еще вопрос: как считать эти семплы на этой картинке https://ccrma.stanford.edu/courses/4...wave-bytes.gif на этом сайте https://ccrma.stanford.edu/courses/4...ts/WaveFormat/ ? Я уже могу перевести заголовок в HEX формат, но нету этих семплов, чтобы их тоже перевести в HEX. Эти же семплы в HEX формате (третья строчка) и есть данные, после заголовка, так ведь? Как их считать - вот самый большой мой вопрос.
Ответить с цитированием
  #13  
Старый 07.08.2012, 21:24
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Dmitry_DM
И еще вопрос: как считать эти семплы на этой картинке https://ccrma.stanford.edu/courses/4...wave-bytes.gif на этом сайте https://ccrma.stanford.edu/courses/4...ts/WaveFormat/ ? Я уже могу перевести заголовок в HEX формат, но нету этих семплов, чтобы их тоже перевести в HEX. Эти же семплы в HEX формате (третья строчка) и есть данные, после заголовка, так ведь? Как их считать - вот самый большой мой вопрос.
Считывай их так же, как считывал заголовок. Только имей ввиду, что ссылки которые ты привёл подразумевают, что внутри WAV-файла аудио-данные в формате PCM (смотри на картинке AudioFormat=1). А внутри WAV-файла могут быть аудио-данные и в другом формате, например в MP3.
И ещё на этом сайте (delphisources.ru) есть несколько исходников для работы с WAV-файлами - поищи по слову "WAV".
Ответить с цитированием
  #14  
Старый 07.08.2012, 21:40
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

пример TFileStream для чтения заголовка WAV файла по аналогии можно читать и остальное (если это сделать перед освобождением потока - он как раз находится за заголовком, от куда можно читать тело файла - данные)
и как всегда гугл нагуглит гуглящему
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard

Последний раз редактировалось cotseec, 07.08.2012 в 21:45.
Ответить с цитированием
  #15  
Старый 07.08.2012, 22:56
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от poli-smen
Считывай их так же, как считывал заголовок. Только имей ввиду, что ссылки которые ты привёл подразумевают, что внутри WAV-файла аудио-данные в формате PCM (смотри на картинке AudioFormat=1). А внутри WAV-файла могут быть аудио-данные и в другом формате, например в MP3.
И ещё на этом сайте (delphisources.ru) есть несколько исходников для работы с WAV-файлами - поищи по слову "WAV".
С этим все нормально. Я работаю с PCM форматом. Завтра попробую считать семплы. Потом напишу что вышло.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:07.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter