Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 15

Перезапись из одного wav файла в другой

21.04.2019, 03:19. Показов 1932. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется такой код:
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
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
#include <tchar.h>
#include "wave.h"
#include <windows.h>
#define N 2048
 
struct WAVEHEADER {
    char chunkId[4];//символы RIFF
    unsigned long chunkSize;//оставшийся размер цепочки
    char format[4];//символы WAVE
    char subchunk1Id[4];//символы fmt
    unsigned long subchunk1Size;//оставшийся размер подцепочки
    unsigned short audioFormat;//аудио-формат
    unsigned short numChannels;//количество каналов
    unsigned long sampleRate;//частота дискретизации
    unsigned long byteRate;//sampleRate * numChannels * bitsPerSample/8
    unsigned short blockAlign;//количество байт для одного сэмпла (numChannels * bitsPerSample/8)
    unsigned short bitsPerSample;//точность звучания
 
    //data
    char subchunk2Id[4];//содержит символы data
    unsigned long subchunk2Size;//количество байт в области данных (numSamples * numChannels * bitsPerSample/8)
 
    //далее следуют непосредственно wav данные
};
 
int main() {
    setlocale(LC_ALL, "Russian");
 
    FILE *file = fopen("Slipknot_1.wav", "rb");
    FILE *txt = fopen("txt.txt", "w");
    WAVEHEADER head;
    short *data;
    short buf[N];
    data = (short *)malloc(N * sizeof(short));
    
    fread_s(&head, sizeof(WAVEHEADER), sizeof(WAVEHEADER), 1, file);
 
    fprintf(txt, "---Считывание заголовка wav файла---\n\n");
    fprintf(txt, "Информация о формате: %c%c%c%c\n", head.chunkId[0], head.chunkId[1], head.chunkId[2], head.chunkId[3]);
    fprintf(txt, "Формат данных: %c%c%c%c\n", head.format[0], head.format[1], head.format[2], head.format[3]);
    fprintf(txt, "Информация о сжатии: %ld\n", head.audioFormat);
    fprintf(txt, "Параметры wav-файла: %c%c%c%c\n", head.subchunk1Id[0], head.subchunk1Id[1], head.subchunk1Id[2], head.subchunk1Id[3]);
    fprintf(txt, "Размер: %ld байт\n", head.chunkSize);
    fprintf(txt, "Частота: %d\n", head.sampleRate);
    fprintf(txt, "Количество каналов: %d", head.numChannels);
    if (head.numChannels == 2)
        fprintf(txt, " (Стерео)\n");
    else
        fprintf(txt, " (Моно)\n");
    fprintf(txt, "Байт в секунду: %ld\n", head.byteRate);
    fprintf(txt, "Размер сэмпла: %d бит\n", head.bitsPerSample);
    fprintf(txt, "Размер области данных: %ld байт\n", head.subchunk2Size);
    fprintf(txt, "\n\n\n");
    
    
    for (int i = 0; i < N; i++) {
        fread(&buf, sizeof(short), i+1, file);
        fprintf(txt, "%i\n", buf[i]);
    }
    
 
    printf("---Считывание заголовка wav файла---\n\n");
    printf("Информация о формате: %c%c%c%c\n", head.chunkId[0], head.chunkId[1], head.chunkId[2], head.chunkId[3]);
    printf("Формат данных: %c%c%c%c\n", head.format[0], head.format[1], head.format[2], head.format[3]);
    printf("Информация о сжатии: %ld\n", head.audioFormat);
    printf("Параметры wav-файла: %c%c%c%c\n", head.subchunk1Id[0], head.subchunk1Id[1], head.subchunk1Id[2], head.subchunk1Id[3]);
    printf("Размер: %ld байт\n", head.chunkSize);
    printf("Частота: %d\n", head.sampleRate);
    printf("Количество каналов: %d", head.numChannels);
    if (head.numChannels == 2)
        printf(" (Стерео)\n");
    else
        printf(" (Моно)\n");
    printf("Байт в секунду: %ld\n", head.byteRate);
    printf("Размер сэмпла: %d бит\n", head.bitsPerSample);
    printf("Размер области данных: %ld байт\n", head.subchunk2Size);
 
    FILE *wave = fopen("new.wav", "wb");
    fwrite(&head, sizeof(WAVEHEADER), 1, wave);
    for(int i = 0; i < N; i++)
        fwrite(buf, sizeof(short), sizeof(buf), wave);
 
    
    fclose(file);
    fclose(txt);
    fclose(wave);
 
    _getch();
    return 0;
}
Нужно взять заголовок и данные из одного файла и записать их в новый файл, созданный так же в коде (new.wav). Это не конечная цель, но мне важно понять как правильно записать файл. Я хотела перезаписать первые 4 Кб, но проигрыватель отказывается воспроизводить файл. Пишет, что «decoder was not found for this format» (Декодер не найден для этого формата). В чём моя ошибка? С функцией fwrite работаю впервые и я мог в ней напортачить...

В txt я просто записываю данные о файле (Заголовок и данные).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2019, 03:19
Ответы с готовыми решениями:

Создание файла. Перезапись информации с одного файла в другой. Ошибки
Здравствуйте! Помогите пожалуйста. Поставлена задача: создать файл из 55 целых чисел, используя генератор рандомных чисел. Переписать все...

перезапись из файла в другой
Здравствуйте, вопрос такой: есть txt файл в котором находятся данные, нужно все строки из файла вывести на страницу сайта и после каждой...

Из одного файла переместить текст в другой файл с заменой текста на другой
Помогите нужно сделать вот такую вещь заготовка есть но не могу осмыслит как сделать вот это: Надо из одного файла переместить текст в...

22
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 15
26.04.2019, 12:09  [ТС]
Студворк — интернет-сервис помощи студентам
Ygg, спасибо! Можно последние два вопроса? Какие переменные для чего нужны в 18-ой строке? Я только dataSize понял. И для того, чтобы производить манипуляции с данными, нужно сначала склеить char'ы data в short'ы?
0
2736 / 891 / 331
Регистрация: 10.02.2018
Сообщений: 2,128
26.04.2019, 12:28
formatOffset - смещение от начала файла до информации о формате звука,
formatSize - размер информации о формате звука,
dataOffset - смещение от начала файла до звуковых семплов,
dataSize - суммарный размер всех звуковых семплов.

Ничего склеивать не нужно. Но нужно проанализировать формат данных. Нужно убедиться, что звук не компрессированный. Понять сколько каналов звука в файле и узнать размер одной выборки отдельного канала. От этих параметров зависит дальнейшая обработка.
0
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 15
27.04.2019, 10:32  [ТС]
Ygg, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.04.2019, 10:32

Как скопировать текст от одной заданной метки до другой из одного текстового файла в другой?
нужно скопировать всё что находится в txt файле ОТ &lt;dekl&gt; ДО &lt;/dekl&gt; подскажите пожалуйста, сам найти так и не смог =(

Перезапись данных из одно fit файла в другой fit файл
Помогите пожалуйста составить программу, которая брала бы имеющийся файл in.fit и переписовала бы из этого файла все данные в новый файл...

Организовать перенос из одного файла в другой с помощью нетипизированого файла.
Организовать перенос из одного файла в другой с помощью нетипизированого файла.

Написать программу записи содержимого из одного файла в другой : Тип файла текстовый
#include &quot;StdAfx.h&quot; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main () { FILE...

из одного файла в другой
подскажите пожалуйста, как скопировать полностью бит в бит из одного exe в другой exe? Чтото не получается :) int main() { ...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru