Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
 Аватар для MegaSinner
99 / 95 / 9
Регистрация: 09.04.2010
Сообщений: 746

Как определить с высокой точностью момент времени максимального уровня шума

10.07.2011, 14:15. Показов 3089. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Допустим есть wav-запись, в котором максимальный уровень шума происходит чере 3.868 секунды.
Как это можно определить используя шарп?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.07.2011, 14:15
Ответы с готовыми решениями:

Как определить координату x0 точки в начальный момент времени;
Уравнение движения точки имеет вид x = 400−0,6t Пользуясь уравнением, выполнить следующее: 1) определить координату x0 точки в...

Как найти точки пересечения. с высокой точностью до двух заков после запятой
Вот например есть набор значений(рандомно): х1=(1 2 3 4 5 6 7) у1=(15 14 25 35 36 85 45) и х2=(1 2 3 4 5 6 7) у2=(1 20 23 25...

Ослабление уровня шума
Рассчитайте ослабление уровня шума в точке R (для трёх значений RF) при прохождении поезда за счёт применения звукозащитного экрана TO если...

7
12 / 12 / 4
Регистрация: 18.10.2010
Сообщений: 59
10.07.2011, 17:35
По идее просто разбиваешь WAV по сэмплам и смотришь, в котором наибольший уровень шума. Могу скинуть кое-какие наработки в этом вопросе.
Разбив WAV на отдельные семплы конвертишь каждый сэмпл (или один канал сэмпла) побитово в целове число, потом ищешь максимальное целое из всех и вычисляешь, в какой момент времени оно было.

Добавлено через 6 минут
Bytes 20- 21: Bytes per sample. 1 for 8 bit mono, 2 for 8 bit stereo or
16 bit mono, 4 for 16 bit stereo.
В заголовке wav Файла содержится информация о качестве звука, насколько понимаю, в целое нужно конвертировать либо 8 бит, либо 16, в зависимости от качества.

Добавлено через 4 минуты
Ну и, соответственно, используя бинарный ридер, пропускаешь заголовок в 44 байта, считываешь всё остальное в байтовый массив, и конвертируешь по 1 или 2 байта за раз в целые.
1
12 / 12 / 4
Регистрация: 18.10.2010
Сообщений: 59
11.07.2011, 22:27
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
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections;
using System.IO;
 
namespace WavAmpl
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        byte[] buffer = new byte[4];//Будем с его помощью переводить байты в int
        ArrayList Amp = new ArrayList(1000);//Будем хранить значения амплитуды звука 
        int volume = 0;//Будем использовать для хранения каждого 2400 сэмпла
        int currentVolume = 0;//Вспомогательный элемент
        private void btn_open_Click(object sender, EventArgs e)
        {
            Amp.Clear();//очищаем массив от предыдущих данных
            OpenFileDialog sh = new OpenFileDialog();//выбираем файл
            sh.Filter = "wav Files|*.wav";//Фильтр - только wav файлы
            sh.ShowDialog();
            if (sh.FileName != "")//Если выбран какой-нибудь файл
            {
                FileStream fs = new FileStream(sh.FileName, FileMode.Open, FileAccess.Read);
                fs.Seek(44, SeekOrigin.Begin);//Перематываем 44 байта от начала файла - заголовок
                bool end = false;
                while (!end)
                {
                    for (int i = 0; i < 2400; i++)
                    {//Берём каждый 2400 сэмпл, или 20 сэмплов в секунду для файла с качеством
                     //звука 48000
                        if(fs.Read(buffer, 0, 4) == 4)//Считываем 4 байта в buffer
                        {//если кол-во считанных байт меньше 4, значит, найден конец файла, заканчиваем чтение
                            currentVolume = BitConverter.ToInt16(buffer, 0);
                            if (volume < currentVolume)//Из 2400 берём самое большое значение,
                                volume = currentVolume;//чтобы случайно не пропустить пик
                        }
                        else 
                        {
                            end = true;
                            break;
                        }
                    }
                    Amp.Add(volume);//Добавляем в массив
                    volume = 0;//Обнуляем
                }
                
            }
            Amplitude.Width = Amp.Count;//подгоняем ширину графика под кол-во данных
            Bitmap bmp = new Bitmap(Amplitude.Width, Amplitude.Height);//создаём в оперативной памяти новый рисунок
            Graphics gr = Graphics.FromImage(bmp);
            Pen RedPen = new Pen(Color.Green, 1);
            for (int i = 0; i < Amp.Count; i++)
            {//рисуем наш график
                gr.DrawLine(RedPen, i, bmp.Height, i, bmp.Height - bmp.Height * Convert.ToInt32(Amp[i]) / 32767);
            }
            Amplitude.Image = bmp;
        }
    }
}
Пример. Для 16 бит стерео, для других форматов, думаю, разберётесь, если что.
Да, ещё нюанс, в данном случае мы считываем за раз значения обоих каналов (4 байта), но берём в рассмотрение только левый (2 байта).
Вложения
Тип файла: zip WavAmpl.zip (78.5 Кб, 152 просмотров)
0
0 / 0 / 0
Регистрация: 30.05.2012
Сообщений: 5
30.05.2012, 22:09
Скажите пожалуйста как это сделать на языке java?

Добавлено через 1 минуту
Очень при очень нужен код, помогите пожалуйста.
0
12 / 12 / 4
Регистрация: 18.10.2010
Сообщений: 59
30.05.2012, 23:19
Arishka, во-первых, преочень, хотя такого слова и нет)
Во-вторых, завтра могу попробовать набросать завтра-послезавтра, если не забуду, давно собирался переписать на Java, руки не доходят всё.
Если нужно быстрее, не стесняйтесь пробовать сами)
0
0 / 0 / 0
Регистрация: 30.05.2012
Сообщений: 5
31.05.2012, 01:05
Дело в том, что я C# не знаю.
0
12 / 12 / 4
Регистрация: 18.10.2010
Сообщений: 59
01.06.2012, 21:34
Arishka, он от Java не так сильно отличается.
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
01.06.2012, 23:06
Цитата Сообщение от Arishka Посмотреть сообщение
Скажите пожалуйста как это сделать на языке java
Здесь не будет обсуждаться Java. Обратитесь в соответствующий раздел
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.06.2012, 23:06
Помогаю со студенческими работами здесь

Определить ускорение частицы в момент времени
Частица совершает колебания по закону x = 30 10-2 cos(1,5 t), м. Определить ускорение частицы в момент времени, когда ее скорость равна ...

Определить скорость точки в момент времени
Помогите пожалуйста, если ответ, нужно решение. Заранее спасибо Материальная точка массой m = 11 кг движется по криволиней*ной траектории...

Определить скорость точки в момент времени t=10
Материальная точка массой m=900кг движется по горизонтальной прямой под действием силы F=270t, которая направлена по той же прямой....

Определить скорость точки в момент времени
Определить скорость точки в момент времени, когда радиус кривизны траектории \rho = 5 м, касательное ускорение аτ = 2 м/с2, а tgβ...

Определить ускорение тела в момент времени
Пожалуйста срочно нужно решить задачку. Радиус - вектор материальной точки задан уравнением r=2ti-4t^3j+3t^2k. Определить ускорение тела...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru