Форум программистов, компьютерный форум CyberForum.ru

Работа со звуком - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ for,while,do while (программа должна сообщить кол-во введенных слов) http://www.cyberforum.ru/cpp-beginners/thread776139.html
"Напишите программу,использующую массив char и цикл для чтения по одному слову за раз до тех пор,пока не будет введено слово done.Затем программа должна сообщить кол-во введенных слов(исключая done).Вы должны включить заголовочный файл cstring и использовать функцию strcmp() для выполнения проверки." #include <iostream> #include <conio.h> #include <cstring> #include <locale> using namespace...
C++ Переменная параметров У меня в классе есть указатель на функцию class a { void(*fun)(void); }; Вся проблема в том, что каждаю функция не будет иметь одно и тоже количество параметров... В одно может быть два, во второй три и т.д http://www.cyberforum.ru/cpp-beginners/thread776135.html
Найти максимальное по числу вершин подмножество C++
Задали сделать прогу на C++ собственно вот задача: Найти максимальное по числу вершин подмножество попарно несмежных вершин заданного графа (cn<=10 вершинами) Юзал поиск, ответов в темах не нашёл...
C++ создать класс BufStr
помогите создать класс пожалуйста.Разработать класс , содержащий указатель на строку, а также функции ввода этой строки из внешнего массива, файла или объекта такого же класса, функцию, возвращающую указатель на копию строки, функцию записи строки в файл. Разработать программу тестирования объекта данного класса. Добавлено через 22 минуты интерфейс а дальше вот как не понимаю((( class BufStr...
C++ Генератор случайных чисел http://www.cyberforum.ru/cpp-beginners/thread776087.html
Как написать генератор случайных (пусть и псевдо) чисел, выдающий на выходе целые случайные числа от 1 до 10 и в кол-ве 10-и и без повторов. Тоесть надо на выходе получить 10 случайных чисел без повторов от 1-го до 10-и
C++ Непонятно условие. Основы С++ (Найти все слова, в которых доля букв a, b максимальна) Добрый день. Задали решить пару задач из задачника Абрамова. Только условия вообще не могу понять! Помогите, пожалуйста, чем-нибудь!! Заранее благодарен!! Тема: Программирование задач по обработке последовательности символов. Задача 808в Дан текст. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть, как прежде (см. задачу... подробнее

Показать сообщение отдельно
mago
Сообщений: n/a
31.01.2013, 16:12     Работа со звуком
В общем, мне нужно реализовать обычное эхо в некомпрессированном wav файле со звуком и сохранить в новый файл. Но при добавлении появляется шум! Обычное ли это явление, или я что-то делаю не так?
В моём примере пытаюсь сделать задержку в 1 секунду.
Привожу код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <stdio.h>
#include <iostream> 
#include <Windows.h>
#include <tchar.h>
#include <conio.h>
#include <math.h>
#include <fstream>
using namespace std;
void main (void)
{
    setlocale(LC_ALL,"Russian"); //Локаль
    ifstream file("C:\\ok.wav",ios::beg | ios::in|ios::binary); //Наша wav'ка
    
    DWORD dwRIFF = 0; //И так идет формат wav-файла, он относится к RIFF-файлам, поэтому читаем 4 байта структуы
    file.read((char*) &dwRIFF,4);
    if (dwRIFF != MAKEFOURCC('R','I','F','F')) //Если RIFF не получили, то значит какую то залепу открыли
    {
        cout<<"Файл не является RIFF - formated"<<endl;
        system("pause");
        return;
    }
 
    long chunkSize = 0;
    file.read((char*)&chunkSize,4);
    cout<<"chunkSize = "<<chunkSize<<endl;
    
    DWORD dwWave = 0; //Секция WAVE
    file.read((char*)&dwWave,4); //Читаем 4 байта, там для Wav-файла должно быть название секции WAVE
    if (dwWave != MAKEFOURCC('W','A','V','E')) //Проверим
    {
        cout<<"Файл не имеет секции WAVE"<<endl;
        system("pause");
        return;
    }
 
    DWORD dwFormat = 0; // Секция fmt /формат файла/
    file.read((char*)&dwFormat,4); //Если все ОК... То читаем 
    if (dwFormat != MAKEFOURCC('f','m','t',' ')) //Если секция fmt - не найдена 
    {
        cout<<"Файл не имеет Format(fmt)-Секции "<<endl;
        system("pause");
        return;
    }
 
    long  lSizeFmt = 0; //Размер секции fmt
    file.read((char*)&lSizeFmt,4);
    cout<<"lSizeFmt = "<<lSizeFmt<<endl;
 
    long  audioFormat = 0;
    file.read((char*)&audioFormat,2);
    cout<<"audioFormat = "<<audioFormat<<endl;
 
    long numChannels = 0;
    file.read((char*)&numChannels,2);
    cout<<"numChannels = "<<numChannels<<endl;
    
    long sampleRate = 0;
    file.read((char*)&sampleRate,4);
    cout<<"sampleRate = "<<sampleRate<<endl;
 
    long byteRate = 0;
    file.read((char*)&byteRate,4);
    cout<<"byteRate = "<<byteRate<<endl;
 
    long blockAlign = 0;
    file.read((char*)&blockAlign,2);
    cout<<"blockAlign = "<<blockAlign<<endl;
    
    long bitsPerSample = 0;
    file.read((char*)&bitsPerSample,2);
    cout<<"bitsPerSample = "<<bitsPerSample<<endl;
 
    DWORD dwSection = 0; //Следующая секция у нас data(это как раз наш звук)
    file.read((char*)&dwSection,4); //Читаем заголовок
    if (dwSection != MAKEFOURCC('d','a','t','a')) //Ну а теперь сама data - это то, над чем мы будем работать
    {
        cout<<"Не найдена секция data"<<endl;
        system("pause");
        return;
    }
    
    long dwDataSize = 0; 
    file.read((char*)&dwDataSize,4);
    cout<<"dwDataSize = "<<dwDataSize<<endl;
 
    char *pData = new char[dwDataSize]; //Динамически выделим переменную типа char[размер звуковых данных]
    file.read (pData, dwDataSize); //Прочитаем в нее все звуковые данные
    
    file.close();
 
    char *pDataEcho = new char [dwDataSize + int (1 * byteRate)]; 
    memset (pDataEcho, 0, dwDataSize + 1 * byteRate); 
    signed long sum;
//////////Далее самое главное - делаем эхо///////////
    for (int i = 0; i < dwDataSize; i++) 
    {
        pDataEcho [i] += pData [i];
        pDataEcho [i + int (1 * byteRate)] += pData[i];
    }
    long dwDataSize2 = 0;
    dwDataSize2 = dwDataSize + 1 * byteRate;
 
    long chunkSize2 = dwDataSize2 + 36;
 
    ofstream file2("C:\\ok2.wav",ios::beg | ios::out|ios::binary);
 
    file2.write((char*)&dwRIFF,4);
    file2.write((char*)&chunkSize2,4);
    file2.write((char*)&dwWave,4);
    file2.write((char*)&dwFormat,4);
    file2.write((char*)&lSizeFmt,4);
    file2.write((char*)&audioFormat,2);
    file2.write((char*)&numChannels,2);
    file2.write((char*)&sampleRate,4);
    file2.write((char*)&byteRate,4);
    file2.write((char*)&blockAlign,2);
    file2.write((char*)&bitsPerSample,2);
    file2.write((char*)&dwSection,4);
    file2.write((char*)&dwDataSize2,4);
    file2.write(pDataEcho, dwDataSize2);
 
    file2.close();
    delete pDataEcho;
    delete pData;
    system("pause");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru