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

Побитная запись в контейнер wav - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как исполльзовать оператор goto? http://www.cyberforum.ru/cpp-beginners/thread1104039.html
Как его юзать?
C++ Классы и объем ОЗУ Помогите пожалуйста с задачей... Создать класс таким образом, чтобы он отслеживал количество существующих в данный момент объектов и объем оперативной памяти, который они занимают. Указание:... http://www.cyberforum.ru/cpp-beginners/thread1104010.html
ПРограмма определяет цвет пикселя по координатам C++
В dev c++ пишу программу, которая определяет координаты, где сейчас находится мышь и цвет пикселя, находящегося в этих координатах. Что надо дописать, чтобы третьей строчкой выводился на экран цвет...
Задача про комплексные числа(закрытые переменные) C++
Нужна срочно ваша помощь, помогите не смыслящему человеку:cry:, модифицировать программу таким образом, чтобы класс содержал закрытые переменные. Код готов. И еще проблема в программе есть когда...
C++ Ввести несколько структур типа «Зачетка студента» http://www.cyberforum.ru/cpp-beginners/thread1103965.html
Вот условие задачи: Ввести несколько структур типа «Зачетка студента» с полями {Фамилия студента Номер зачетки Массив из 4 оценок } Написать программу, выполняющую следующие действия:...
C++ Посоветуйте, как найти мёртвый код Интересуют целые мёртвые функции. подробнее

Показать сообщение отдельно
Sonance
6 / 6 / 3
Регистрация: 15.02.2013
Сообщений: 55
24.02.2014, 16:33  [ТС]
Чегото я не догоняю, добавил в класс структуру заголовка WAV, написал функцию записи заголовка в файл, но чтото в файл вместо нужных символов пишет буквы "M" непойму в чем дело
Вот код:
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
#include "stdafx.h"
#include <math.h>
#include <iostream>
//#include <Wincon.h>
#include <Windows.h>
#include <cstdio>
 
 
double PI=3.14;
class Program {
    public: 
 
        static void Wave() {
            double *data = new double[75]; // Инициализируем массив.
            for (int index = 1; index < 76; index++) { // Вычисляем данные для всего массива.
                data[index-1] = Sine(index, PI * 2 * 2.0 / 75); // Период разделенный на частоту дискретизации.
            }
            WAVHEADER stream;
            SaveWave(data, 8000);
            Draw(data);
            std::cin.get(); // Ждем нажатия любой клавиши.
        }
 
        static double Sine(int index, double frequency) {
            return sin(frequency * index);
        }
 
        static void Draw (double *data) {
            //Console.BufferHeight = 25; // Изменяем длину буфера консоли чтобы избавиться от ползунка.
            //Console.CursorVisible = false; // отключаем курсор для красоты.
            for (int y = 0; y < 19; y++) {// Выписываем индексы уровня звука.
                COORD coord;
                coord.X = 77;
                coord.Y = y+5;
                SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);// Устанавливаем курсор в нужную позицию.
                std::cout << (9 - y); // Выписываем номер индекса уровня.
            }
            for (int x = 0; x < 75; x++) { // Перебираем все элементы массива
                COORD coord;
                coord.X = x;
                coord.Y = x % 3;
                SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);//Устанавливаем курсор в нужную точку.
                std::cout << (x + 1); // пишем индексы элемента.
                int point = (int)(data[x] * 9); // Вычисляем уровень и приводим его к амплитуде от -9 до 9.
                int step = (point > 0)? -1 : 1; // Узнаем в какую сторону 0.
                for (int y = point; y != step; y += step) {// перебираем столбик
                    COORD coord;
                    coord.X = x;
                    coord.Y = point + 14 - y;
                    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); //Устанавливаем курсор в нужную позицию.
                    std::cout << ("#"); // Рисуем точку.
                }
            }
        }
        struct WAVHEADER{
            // WAV-формат начинается с RIFF-заголовка:
            char chunkId[4];// Содержит символы "RIFF" в ASCII кодировке
            unsigned long chunkSize;// 36 + subchunk2Size, или более точно:
            char format[4];// Содержит символы "WAVE"
            char subchunk1Id[4];// Содержит символы "fmt "
            unsigned long subchunk1Size;// 16 для формата PCM.
            unsigned short audioFormat;// Для PCM = 1 (то есть, Линейное квантование).
            unsigned short numChannels;// Количество каналов. Моно = 1, Стерео = 2 и т.д.
            unsigned long sampleRate;// Частота дискретизации. 8000 Гц, 44100 Гц и т.д.
            unsigned long byteRate;// sampleRate * numChannels * bitsPerSample/8
            unsigned short blockAlign;// Количество байт для одного сэмпла, включая все каналы. numChannels * bitsPerSample/8
            unsigned short bitsPerSample;// Так называемая "глубиная" или точность звучания. 8 бит, 16 бит и т.д.
            char subchunk2Id[4];// Подцепочка "data" содержит аудио-данные и их размер.Содержит символы "data"
            unsigned long subchunk2Size;// Количество байт в области данных.
            // Далее следуют непосредственно Wav данные.
            //unsigned short data;
};
 
        static void SaveWave( double *data, int sampleRate){
            short frameSize = (short)(16 / 8);
            WAVHEADER stream;
            stream.chunkId[4] = ('R','I','F','F');
            stream.chunkSize = (36 + sizeof(data) * frameSize);
            stream.format[4] = ('W','A','V','E');
            stream.subchunk1Id[4] = ('f','m','t',' ');
            stream.subchunk1Size = 16;
            stream.audioFormat = ((short)1);
            stream.numChannels = ((short)1);
            stream.sampleRate = sampleRate;
            stream.byteRate = (sampleRate * frameSize);
            stream.blockAlign = frameSize;
            stream.bitsPerSample = ((short)16);
            stream.subchunk2Id[4] = ('D','A','T','A');
            stream.subchunk2Size = (sizeof(data) * frameSize);
 
            FILE *f1;
            f1 = fopen("1.wav", "w+b");
            fwrite(&stream, sizeof(stream), 1, f1);
            fcloseall();
        }
 
};
int main()
{
    Program r;
    r.Wave();
    
    //std::cin.get(); 
 
    return 0;
}
Вот что написано в сохроняемом WAV файле: " ММММ, ММММEМММ   @ Ђ>   ММММ "
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru