Алгоритм для смешивания звука

Это функция (а не сценарий), и ей нужны некоторые входные аргументы для запуска (в данном случае A и x), поэтому вы не можете нажать кнопку запуска и ожидать ее запуска.

Первый способ:

Вместо этого вы можете использовать окна команд в MATLAB и ввести команду:

A = rand(3,3); % define A here
x = ones(3,1); % define x here
test(A,x) % then run the function with its arguments

помните, что необходимо определить A и x

Второй способ:

Также вы можете нажать маленький треугольник, кроме кнопки зеленого запуска (см. рисунок ниже), и он покажет вам еще один вариант, type command to run. И там вы можете напрямую ввести ту же команду test(A,x). После этого каждый раз вы просто нажимаете enter для этой функции и запускаете эту команду вместо команды test без каких-либо аргументов.

enter image description here [/g2]

56
задан Adam Davis 17 December 2008 в 21:08
поделиться

9 ответов

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

В случае появления отсечения, Вы будете вводить искажение в аудио, но это неизбежно. Можно использовать код отсечения для "обнаруживания" этого условия, и сообщить об этом пользователю/оператору (эквивалентный из красного света 'клипа' на микшере...)

Вы могли реализовать более "надлежащий" компрессор/ограничитель, но не зная Ваше точное приложение, трудно сказать, стоило ли это того.

при выполнении большой обработки аудиоданных Вы могли бы хотеть представить свои уровни звука как значения с плавающей точкой и только вернуться к 16-разрядному пространству в конце процесса. Высокопроизводительные системы цифрового аудио часто прокладывают себе путь.

30
ответ дан Roddy 7 November 2019 в 16:28
поделиться

Я сказал бы, просто добавляют их вместе. При переполнении пространства PCM на 16 битов то звуки, которые Вы используете, являются уже невероятно громкими для начала, и необходимо ослабить их. Если это заставило бы их быть слишком мягкими собой, ищите другой способ увеличение полное производство объема, такое как установка OS или превращение кнопки на Ваших динамиках.

-1
ответ дан Adam Rosenfield 7 November 2019 в 16:28
поделиться

Я думаю, что, пока потоки являются некоррелироваными, у Вас не должно быть слишком много для волнения о, необходимо смочь обойтись отсечением. Если бы Вы действительно обеспокоены искажением в точках клипа, мягкий ограничитель, вероятно, работал бы хорошо.

2
ответ дан Tony Arkles 7 November 2019 в 16:28
поделиться

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

3
ответ дан Jon Smock 7 November 2019 в 16:28
поделиться

"Более тихий наполовину" не довольно корректно. Из-за логарифмического ответа уха, разделяя образцы пополам сделает это на 6 дб более тихим - конечно, примечательный, но не имеющий катастрофические последствия.

Вы могли бы хотеть пойти на компромисс путем умножения на 0,75. Это сделает это на 3 дб более тихим, но уменьшит шанс переполнения и также уменьшит искажение, когда это действительно произойдет.

9
ответ дан Mark Ransom 7 November 2019 в 16:28
поделиться

Большинство приложений микширования звука сделает свое смешивание с числами с плавающей точкой (32 бита много достаточно хорошее для смешивания небольшого количества потоков). Переведите образцы на 16 битов в числа с плавающей точкой с диапазоном-1.0 к 1,0 полным масштабам представления в мире на 16 битов. Тогда суммируйте образцы вместе - у Вас теперь есть много высоты. Наконец, если Вы заканчиваете с какими-либо образцами, значение которых пробегается через полный масштаб, можно или ослабить целый сигнал или использовать трудно ограничение (отсекающий значения к 1,0).

Это даст намного лучшие звучащие результаты, чем добавление образцов на 16 битов вместе и разрешение им переполниться. Вот очень простой пример кода, показывающий, как Вы могли бы суммировать два образца на 16 битов вместе:

short sample1 = ...;
short sample2 = ...;
float samplef1 = sample1 / 32768.0f;
float samplef2 = sample2 / 32768.0f;
float mixed = samplef1 + sample2f;
// reduce the volume a bit:
mixed *= 0.8;
// hard clipping
if (mixed > 1.0f) mixed = 1.0f;
if (mixed < -1.0f) mixed = -1.0f;
short outputSample = (short)(mixed * 32768.0f)
17
ответ дан Mark Heath 7 November 2019 в 16:28
поделиться

Если бы необходимо сделать это правильно, я предложил бы смотреть на реализации микшера программного обеспечения с открытым исходным кодом, по крайней мере, для теории.

Некоторые ссылки:

Смелость

GStreamer

На самом деле необходимо, вероятно, пользоваться библиотекой.

4
ответ дан krusty.ar 7 November 2019 в 16:28
поделиться

Здесь есть статья о смешивании здесь . Мне было бы интересно узнать, что другие думают об этом.

27
ответ дан 26 November 2019 в 17:09
поделиться

преобразовать образцы в значения с плавающей запятой в диапазоне от -1,0 до +1,0, затем:

out = (s1 + s2) - (s1 * s2);
4
ответ дан 26 November 2019 в 17:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: