Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PCM формат
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
TigerSHARC
Имеется файл в PCM формате. необходимо "вытащить" из него только полезные данные и представить в виде массива.
Первое что требуется - человеческое описание PCM формата (карта байтов в файле).
Ну и может у кого наработки есть... rolleyes.gif
zombi
Цитата(TigerSHARC @ Sep 13 2012, 14:29) *
Имеется файл в PCM формате. необходимо "вытащить" из него только полезные данные и представить в виде массива.
Первое что требуется - человеческое описание PCM формата (карта байтов в файле).
Ну и может у кого наработки есть... rolleyes.gif

Не думаю что в PCM файле есть бесполезные данные biggrin.gif
Какие именно данные Вам нужны?
Лично я не заморачивался с форматом PCM.
Открывал файл в редакторе и из него сохранял в нужном мне формате, например в WAV.
TigerSHARC
мне нужен массив самого сигнала. и PCM и WAV содержат служебную информацию. А мне нужны только поля DATA.
zombi
Цитата(TigerSHARC @ Nov 1 2012, 14:51) *
мне нужен массив самого сигнала. и PCM и WAV содержат служебную информацию. А мне нужны только поля DATA.

Формат RAW то что вам нужно. Только данные ни заголовков ни служебной информации.
Конвертируйте в него.
yurmala
TigerSHARC, так вы ищите run-time решение разбора PCM или действительно устраивает переконвертирование сбоку?
blackfin
Цитата(TigerSHARC @ Sep 13 2012, 15:29) *
Имеется файл в PCM формате. необходимо "вытащить" из него только полезные данные и представить в виде массива.
Первое что требуется - человеческое описание PCM формата (карта байтов в файле).

Краткое описание есть в Wiki и в WAVE PCM.
TigerSHARC
Цитата(yurmala @ Nov 6 2012, 09:22) *
TigerSHARC, так вы ищите run-time решение разбора PCM или действительно устраивает переконвертирование сбоку?

есть программа(в исходниках), которая складывает данные в PCM-формате. Мне нужно любыми путями получить "сырые данные". Переписать существующую прогу или написать конвертер.
DpInRock
Уберите из файла первые 64 байта. И все.
TigerSHARC
Цитата(DpInRock @ Nov 6 2012, 12:35) *
Уберите из файла первые 64 байта. И все.

правда?
Вот дельный совет! Спасибо.
DpInRock
А что тут дельного. Берете любой редактор типа SoundForge, формируете что попроще, чтобы на взгляд узнать можно было (синус какой нибудь). И Винхексом рассматриваем получившийся файл...
ТАм на самом деле не совсем 64.
Я лично для сугубо утилитраных целей (всякие бипы, звуковые заставки и прочая) просто убираю первые 64 байта.

Хуже того. Их можно и не убирать. На частоте к примеру 16 кгц это 4 мс звука. Часто можно пренебречь.
TigerSHARC
Тогда не совсем дельный совет был.
Частота, в моём случае 10кГц. Терять данные ну никак нельзя.
Где посмотреть структуру pcm-файла?
muravei
Цитата(TigerSHARC @ Nov 6 2012, 14:27) *
Где посмотреть структуру pcm-файла?

Вы не поверите-в rolleyes.gifтырнете!
TigerSHARC
Цитата(muravei @ Nov 6 2012, 15:32) *
Вы не поверите-в rolleyes.gifтырнете!

ой... а тама ошибка 404
muravei
Цитата(TigerSHARC @ Nov 6 2012, 14:49) *
ой... а тама ошибка 404

Это происки врагов! Токашто все было.
Ну погуглите-муглите: Формат Вав
Нет, у меня все нормально.
http://audiocoding.ru/статьи/структура-wav-файла.html

Скопируйте ссылку с экрана и вставьте.
toweroff
TigerSHARC, для получения массива нужно:

1. Sound Forge
2. 1 мин свободного времени

Открываем файл, сохраняем его в RAW. Все!
Вам это уже говорили, а вы не перестаете ходить по граблям
DpInRock
Цитата
Частота, в моём случае 10кГц.

И что? Причем тут частота. Если ваш звук длиной в 1 час, то вы потеряете 1 миллисекунду.
А если не будете вообще убирать заголовок, то добавите в начало своего трека 4 миллисекундный относительно случайный шум, который без специального навыка и не услышать.
https://ccrma.stanford.edu/courses/422/projects/WaveFormat/

Значит убираем не 64, а 44 байта и получаем строго данные.
ReAl
Цитата(TigerSHARC @ Sep 13 2012, 13:29) *
Имеется файл в PCM формате. необходимо "вытащить" из него только полезные данные и представить в виде массива.
Первое что требуется - человеческое описание PCM формата (карта байтов в файле).
Ну и может у кого наработки есть... rolleyes.gif
скрипач формат не нужен. Нужен «швейцарский нож для обработки звука»
http://electronix.ru/forum/index.php?showtopic=67058
TigerSHARC
Цитата(toweroff @ Nov 7 2012, 18:58) *
TigerSHARC, для получения массива нужно:

1. Sound Forge
2. 1 мин свободного времени

Открываем файл, сохраняем его в RAW. Все!
Вам это уже говорили, а вы не перестаете ходить по граблям

Я понимаю.
Но мне нужно в своей программе это осуществить. Поэтому я и спрашивал о структуре формата PCM.
Вопрос решён. Спасибо.

Цитата(DpInRock @ Nov 8 2012, 10:23) *
И что? Причем тут частота. Если ваш звук длиной в 1 час, то вы потеряете 1 миллисекунду.
А если не будете вообще убирать заголовок, то добавите в начало своего трека 4 миллисекундный относительно случайный шум, который без специального навыка и не услышать.
https://ccrma.stanford.edu/courses/422/projects/WaveFormat/

Значит убираем не 64, а 44 байта и получаем строго данные.

вы меня не поняли. В виде PCM записана не звуковая информация, а осциллограмма переходного процесса. Терять данные нельзя. Вообще.

Не спрашивайте почему выбран PCM-формат.
ae_
Цитата(TigerSHARC @ Nov 8 2012, 20:50) *
...Но мне нужно в своей программе это осуществить. Поэтому я и спрашивал о структуре формата PCM...

Вам ответил blackfin 2 дня назад, по второй ссылке описание заголовка PCM формата, те самые 44 байта.
Что-то было непонятно или Вы ответы не читаете?

Цитата(blackfin @ Nov 6 2012, 15:26) *
Краткое описание есть в Wiki и в WAVE PCM.

Sirko
CODE
// Структура, описывающая заголовок WAV файла.
struct WAVHEADER
{
// WAV-формат начинается с RIFF-заголовка:

// Содержит символы "RIFF" в ASCII кодировке
// (0x52494646 в big-endian представлении)
char chunkId[4];

// 36 + subchunk2Size, или более точно:
// 4 + (8 + subchunk1Size) + (8 + subchunk2Size)
// Это оставшийся размер цепочки, начиная с этой позиции.
// Иначе говоря, это размер файла - 8, то есть,
// исключены поля chunkId и chunkSize.
unsigned long chunkSize;

// Содержит символы "WAVE"
// (0x57415645 в big-endian представлении)
char format[4];

// Формат "WAVE" состоит из двух подцепочек: "fmt " и "data":
// Подцепочка "fmt " описывает формат звуковых данных:

// Содержит символы "fmt "
// (0x666d7420 в big-endian представлении)
char subchunk1Id[4];

// 16 для формата PCM.
// Это оставшийся размер подцепочки, начиная с этой позиции.
unsigned long subchunk1Size;

// Аудио формат, полный список можно получить здесь http://audiocoding.ru/wav_formats.txt
// Для PCM = 1 (то есть, Линейное квантование).
// Значения, отличающиеся от 1, обозначают некоторый формат сжатия.
unsigned short audioFormat;

// Количество каналов. Моно = 1, Стерео = 2 и т.д.
unsigned short numChannels;

// Частота дискретизации. 8000 Гц, 44100 Гц и т.д.
unsigned long sampleRate;

// sampleRate * numChannels * bitsPerSample/8
unsigned long byteRate;

// numChannels * bitsPerSample/8
// Количество байт для одного сэмпла, включая все каналы.
unsigned short blockAlign;

// Так называемая "глубиная" или точность звучания. 8 бит, 16 бит и т.д.
unsigned short bitsPerSample;

// Подцепочка "data" содержит аудио-данные и их размер.

// Содержит символы "data"
// (0x64617461 в big-endian представлении)
char subchunk2Id[4];

// numSamples * numChannels * bitsPerSample/8
// Количество байт в области данных.
unsigned long subchunk2Size;

// Далее следуют непосредственно Wav данные.
};


Взято отсюда

Кстати, в одном из журналов Радио (за прошлое тысячилетие кажись), была статья про WAV и схема на трех микрухах, одна из которых - EEPROMка, другая - MAXim (фильтр после шима). Там автор хорошо описал формат.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.