Лучшие алгоритмы/Форматы сжатия речи

Задача

Вы выбрасываете кортеж x при создании нового списка:

        if x[0] == n:
            l_c.append(x)       # here you append x
        else:
            print(l_c)          # here you print but do nothing with x
            l_c = []            # list empty, x is missing
            n+=1
blockquote>

] Solution

def representacao_do_mapa(modo):
    if modo == 1:
        n=0
        l_c = []
        for x in area:
            if x[0] == n:
                l_c.append(x)
            else:
                print(l_c)
                l_c = [x]       # fix here
                n+=1
        print(l_c)              # fix here 

representacao_do_mapa(1)

Кроме того, ваш последний список не будет напечатан, потому что последний l_c никогда не попадет в печатную часть вашего кода - вы должны добавить это Вокруг области цикла.

Вывод (для n_vertical = 3 и n_horizontal = 3:

[(0, 0, 0), (0, 1, 0), (0, 2, 0)]
[(1, 0, 0), (1, 1, 0), (1, 2, 0)]
[(2, 0, 0), (2, 1, 0), (2, 2, 0)]

Оптимизации:

Вы можете сократить свой код, используя списки и списки разложение:

n_vertical = 3
n_horizontal = 3
area = [ (x,y,0) for x in range(n_horizontal) for y in range(n_vertical )]
# create with inner lists
area2 = [ [(x,y,0) for x in range(n_horizontal)] for y in range(n_vertical)]

print(area)

# print each inner list on new line
print(*area2, sep="\n")

Или вы можете распечатать напрямую из area:

print(* (area[i*n_horizontal:i*n_horizontal+n_horizontal] 
         for i in range(n_vertical)) , sep="\n")

, используя выражение генератора для нарезки area на n_horizontal частей.

]

Подробнее о выражениях генератора / списка: Выражения генератора и понимание списка

Подробнее о списках чанков: Как разбить список на куски одинакового размера ?

Подробнее о нарезке списка: Понимание обозначения фрагмента

Подробнее о печати: https://docs.python.org/3/library /functions.html#print

7
задан Blair Conrad 3 October 2008 в 16:10
поделиться

5 ответов

Запустите здесь.

Как Вы справедливо указываете, сжатие речи отличается от общего сжатия звука. Вы найдете много кодеков выделенными телефонным приложениям, в пределах от PCM и ADPCM через более позднюю основанную на пакете кодировку, такую как CELP используемый на сотовых сетях GSM.

Однако, речевое кодирование VoIP немного отличается от этого из-за используемого носителя. можно найти пользу, свободную (свободной и с открытым исходным кодом (BSD)) библиотека для речевого кодирования/декодирования в библиотеке программного обеспечения Speex.

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

Для получения большего количества справки сузьте вопрос.

- Adam

5
ответ дан 7 December 2019 в 01:28
поделиться

Наиболее часто используемые форматы сжатия, используемые в живом речевом аудио (как телефония VoIP), являются μ-Law (mu-Law/u-Law используется в США) и закон (используемый в Европе, и т.д.), который, в отличие от Несжатого PCM, не поддерживают как широкий из частотного диапазона (меньший диапазон возможных значений игнорирует звуки за пределами необходимого спектра и требует, чтобы меньше пространства сохранило).

Для пользы удобства использования является самым легким использовать mpeg сжатия (mp2/3/4) для потоковой передачи к стандартным медиаплеерам, поскольку алгоритмы легко доступны и обычно довольно быстры, и почти плееры всех носителей должны поддерживать его, но для речи Вы могли бы попытаться указать более низкую скорость передачи или сделать Ваше преобразование из более низкого качественного файла во-первых (WAV может быть на нескольких частотах дискретизации, и речь требует намного более низкой частоты дискретизации, чем музыка или эффекты, это похоже на в основном кадр в секунду на видео). Кроме того, можно использовать Real Media, WMA или другие собственные форматы, но это ограничило бы удобство использования, так как пользователи потребуют определенного внешнего программного обеспечения для воспроизведения, хотя WMA имеет превосходную степень сжатия, а также опции сжатия, характерные для речевого аудио.

1
ответ дан 7 December 2019 в 01:28
поделиться

Принятие Ваших пользователей будет запускать Windows, существует кодек сжатия речи WMA, что можно использовать с Кодером Windows Media SDK. Приводя это к сбою, можно использовать ACM для использования чего-то как G723/G728, ADPCM, mu-закон или закон, некоторые из которых установлены как стандарт на Windows XP и выше. Они могут быть упакованы в файлах WAV. Необходимо будет экспериментировать немного для нахождения правильной скорости передачи/качества (вероятно, не беспокоятся mu-законом или законом). С речевой информацией можно сойти с рук довольно низкие частоты дискретизации - например, 16000 или 8000, поскольку нет очень выше 4 кГц в человеке разговорной речи.

0
ответ дан 7 December 2019 в 01:28
поделиться

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

Один недостаток, особенно в Вашем случае состоит в том, что, насколько я знаю, он не поддерживается широким спектром медиаплееров. QuickTime и RealPlayer равняются двум, которые я знаю для проигрывания .amr файлов.

0
ответ дан 7 December 2019 в 01:28
поделиться

Попробуйте speex ... не обремененный патентами, хорошая производительность как по размеру, так и по ЦП. Мне очень повезло, что я использую его на iPhone.

0
ответ дан 7 December 2019 в 01:28
поделиться
Другие вопросы по тегам:

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