Чистый PCM с открытым исходным кодом C# к преобразователю Mp3? [закрытый]

Канонический путь состоит в том, чтобы использовать встроенный итератор курсора.

curs.execute('select * from people')
for row in curs:
    print row
<час>

можно использовать fetchall() для получения всех строк сразу.

for row in curs.fetchall():
    print row

может быть удобно использовать это для создания списка Python, содержащего возвращенные значения:

curs.execute('select first_name from people')
names = [row[0] for row in curs.fetchall()]

Это может быть полезно для меньших наборов результатов, но может иметь плохие побочные эффекты, если набор результатов является большим.

  • необходимо ожидать всего набора результатов, который будет возвращен к клиентскому процессу.

  • можно съесть большую память в клиенте для содержания составного списка.

  • Это может требовать времени для Python, чтобы создать и вскрыть противоречия в списке, который Вы собираетесь сразу отбросить так или иначе.

<час>

, Если Вы знаете, существует единственная строка, возвращаемая в наборе результатов, который можно назвать fetchone() для получения единственной строки.

curs.execute('select max(x) from t')
maxValue = curs.fetchone()[0]
<час>

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

row = curs.fetchone()
while row:
    print row
    row = curs.fetchone()
6
задан Rella 23 November 2009 в 08:04
поделиться

4 ответа

Версия без LINQ:

/// <summary>
/// Returns latest writen file from the specified directory.
/// If the directory does not exist or doesn't contain any file, DateTime.MinValue is returned.
/// </summary>
/// <param name="directoryInfo">Path of the directory that needs to be scanned</param>
/// <returns></returns>
private static DateTime GetLatestWriteTimeFromFileInDirectory(DirectoryInfo directoryInfo)
{
    if (directoryInfo == null || !directoryInfo.Exists)
        return DateTime.MinValue;

    FileInfo[] files = directoryInfo.GetFiles();
    DateTime lastWrite = DateTime.MinValue;

    foreach (FileInfo file in files)
    {
        if (file.LastWriteTime > lastWrite)
        {
            lastWrite = file.LastWriteTime;
        }
    }

    return lastWrite;
}

/// <summary>
/// Returns file's latest writen timestamp from the specified directory.
/// If the directory does not exist or doesn't contain any file, null is returned.
/// </summary>
/// <param name="directoryInfo">Path of the directory that needs to be scanned</param>
/// <returns></returns>
private static FileInfo GetLatestWritenFileFileInDirectory(DirectoryInfo directoryInfo)
{
    if (directoryInfo == null || !directoryInfo.Exists)
        return null;

    FileInfo[] files = directoryInfo.GetFiles();
    DateTime lastWrite = DateTime.MinValue;
    FileInfo lastWritenFile = null;

    foreach (FileInfo file in files)
    {
        if (file.LastWriteTime > lastWrite)
        {
            lastWrite = file.LastWriteTime;
            lastWritenFile = file;
        }
    }
    return lastWritenFile;
}
-121--2510014-

mp3 не является бесплатным кодеком. Попробуйте вместо этого поискать Ogg, у вас будет больше шансов найти там кодек с открытым исходным кодом.

Также переводы кодеков редко выполняются в управляемом коде, потому что они требуют высокой эффективности, например, это задача с интенсивным использованием ЦП, поэтому переход к родная dll будет намного быстрее. (для разного уровня много). Если вы найдете то, что ищете, это будет медленно и, вероятно, нарушит авторское право фраунгофера. http://www.codeproject.com/KB/audio-video/MP3Compressor.aspx

Три секунды в Google не дали никаких кодировщиков ogg. Такие вещи редко встречаются в управляемом коде.

-1
ответ дан 18 December 2019 в 05:06
поделиться

Вы уверены, что необходима чистая реализация C #? Вы можете просто обернуть lame.dll и использовать его вместо этого. Если вы записываете звук вживую, а затем транслируете его в формате mp3, эта ссылка может помочь.

Другое дело, я думаю, что MP3 - не единственный вариант для потоковой передачи. Silverlight должен поддерживать WMA, и должен быть чистый C # способ для этого.

Вот ссылка на учебный проект , который транслирует mp3-файлы.

0
ответ дан 18 December 2019 в 05:06
поделиться

Он еще не существует и будет медленнее, чем неуправляемый код, но вы можете попробовать преобразовать кодировщик java ogg http://downloads.xiph.org/releases/vorbis-java для уединения, подобного звуку Skype

0
ответ дан 18 December 2019 в 05:06
поделиться

Если вы хотите кодировать высококачественный звук музыкального уровня в Silverlight, я думаю, вам может не повезти, пока кто-нибудь не портирует кодировщик Ogg Vorbis. Но если вам просто нужно сделать голос, есть разумный перенос видеокодека Speex на чистый (Silverlight) C # под названием CSpeex, размещенный здесь . Это (в основном автоматизированный) порт C # порта Java версии кодека Speex ~ 2003, но я заставил его работать. И, конечно же, это только часть решения для потоковой передачи звука на сервер (и вниз), но это, пожалуй, самая сложная часть.

Однако никакого подавления эха в C # нет. . . пока кто-нибудь не наберется смелости и не портирует библиотеку Speex DSP на C #: -).

0
ответ дан 18 December 2019 в 05:06
поделиться
Другие вопросы по тегам:

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