Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 15
1

Ошибка при выводе файла на озвучку

28.04.2015, 03:49. Показов 568. Ответов 3
Метки нет (Все метки)

Здравствуйте товарищи, есть проблема. Пытаюсь вывести файл на озвучку, в проге присутстует повышение частоты дискритизации и получение стерео. Если я не вывожу в стерео, прога отлично работает, звук не заедает, щелков нет. При попытке вывести в стерео ( копирую моно буфер в стерео последовательно сперва блок в левый канал, затем в блок в правый , в левый, в правый и тд) воспроизведение файла идет с щелчками. О чем говорят эти щелчки, что я делаю не так?

Добавлено через 16 минут
"Формат звуковых данных с дискретностью 16 бит выглядит аналогично. Для монофонического сигнала данные хранятся в массиве 16-битовых слов. Для стерео-фонического используется массив двойных слов, причем младшему слову соот-ветствует левый канал, а старшему - правый." - Цитата из теории wav формата и кажется я понял в чем ошибка, помогите пожалуйста правильно сделать запись моно буфера в стереобуфер (массив двойных слов) чтобы один и тотже сигнал был на обоих каналах (левом и правом).
Не пойму как реализовать массив двойных слов, да еще и так чтобы младшему слову соответствовал левый канал, а старшему - правый=/

Добавлено через 12 минут
так выглядит запись сейчас


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    
 в хидере
    Ipp16s      *FpageBuf;
    Ipp16s      *FpageBuf2;
в cpp
    FpageBuf       = new Ipp16s [FbufSize*otn*FpageCount]; // массив в котором записывается моно
    FpageBuf2      = new Ipp16s [2*FbufSize*otn]; // массив в который перезаписываем моно сигнал, для //получения    стерео, нужен  массив двойных слов как его сделать я не знаю =(
 
for (int i=0; i < FpageSizes[FpagePosTR]; i++)  // нерабочая запись буфера моно в сетеро тут нужно реализовать
                                                               // соответствие младшему слову левого канала, а старшему - правого
    {
    FpageBuf2[i*2]   = FpageBuf[FpagePosTR*FbufSize*otn+i]; 
    FpageBuf2[i*2+1] = FpageBuf[FpagePosTR*FbufSize*otn+i];
    }
 
 
    FWavHeader.lpData         = (char*)(FpageBuf2);//(char*)(&FpageBuf[FpagePosTR*FbufSize*otn]);//
    FWavHeader.dwBufferLength = FpageSizes[FpagePosTR]*4;//FbufSize*otn*2;
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2015, 03:49
Ответы с готовыми решениями:

Ошибка при выводе файла записи
Задача состоит в том, что надо создать файл записи (музыка: исполнитель, название, год, жанр),...

Ошибка при выводе бинарного файла
Добрый день! Ошибка вот в чем: при сортировке массива, в одну ячейку StringGrid вставляет две...

Ошибка при вводе - выводе из файла
Почему пишет не найдет файл (в проге ассигн,ресет, реврайт стоит на него) создаю его вручную -...

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

3
2054 / 1529 / 167
Регистрация: 14.12.2014
Сообщений: 13,326
28.04.2015, 05:30 2
Цитата Сообщение от xzickx Посмотреть сообщение
причем младшему слову соот-ветствует левый канал, а старшему - правый.
В твоем случае это без разницы, так как оба канала средние.
Если вот здесь
C++
1
FpageBuf[FpagePosTR*FbufSize*otn+i];
все правильно то дело не в коде, во всяком случае если Ipp16s unsigned int16
1
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 15
28.04.2015, 14:23  [ТС] 3
т.е. сам алгоритм записи правильный и нужно проверить размеры буферов и попробовать изменить Ipp16s на Ipp16u ?

Добавлено через 21 минуту
"Один момент, касающийся данных выборок, который может вызвать некоторое замешательство - когда выборки представлены 8 битами, они определены как значения без знака (unsigned). Все другие битовые размеры указываются как величины со знаком (signed). Например, выборка 16 бит может иметь значение в диапазоне от -32768 до +32767, где средняя точка (напряжение сигнала равно 0) соответствует значению 0." вот еще из теории, т.е. по идее правильно Ipp16s.
Эх пробовал менять размеры буферов, все бестолку, щелчки как были так и остались.

Добавлено через 1 минуту
otn в записи это отношение частот дискретизации 44100 к 4800 округленное в большую сторону т.е. 10
0
2054 / 1529 / 167
Регистрация: 14.12.2014
Сообщений: 13,326
28.04.2015, 14:26 4
Цитата Сообщение от xzickx Посмотреть сообщение
Эх пробовал менять размеры буферов, все бестолку, щелчки как были так и остались.
Как ты их туда не пихай, при простом копировании, тот код который обрабатывает буфер будет по своему типы типить. В данном случае это не важно. Щелчки могут возникать по другим причинам. например по причине псевдостерео, местами через два динамика просто щелчки воспринимаются. насколько я слышал просто так раздавать на кучу каналов с одного нельзя. надо поворачивать фазу звука. но я в этом деле (аккустических эффектов) не спец. для прикола, попробуй стерео разложить на два потока а потом сложить обратно. проверишь тут проблемы в коде или в восприятии аудио.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2015, 14:26

Ошибка при выводе файла с помощью fprintf
FILE *F=fopen(&quot;1_1.txt&quot;,&quot;w&quot;); std::string st=&quot;0123&quot;; for(int i=0;i&lt;st.length();i++) { ...

Ошибка при выводе содержимого текстового файла
Здравствуйте,имеется программа на c# с помощью mono компилирую : mcs -recurse:'*.cs' В...

Ошибка при выводе содержимого бинарного файла
#include &quot;stdafx.h&quot; #include &quot;windows.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; using...

Ошибка доступа при выводе в listbox символа из файла
почему это произошло и как это можно починить? #include &quot;windows.h&quot; #include &quot;resource.h&quot;...

Ошибка в работе с поиском в консоли при выводе текстового файла
Добрый день! Помогите исправить ошибку, написал код, и казалось бы, всё работает, но при поиске...

Ошибка: Non-UTF-8 code starting with '\xcd' при выводе текста из файла
надо было вывести текст из файла выводит вот такую ошибку SyntaxError: Non-UTF-8 code starting...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.