Click here to lend your support to: Support for LadioCast (in MAS) and make a donation at pledgie.com !
LadioCast.png

LadioCast 0.11.5 Released – LadioCast Development Notes No.88

in LadioCast

LadioCast Version 0.11.5 has been released.

Changes from version 0.11.4 to 0.11.5 are as follows:

  • Changed the way to save connected audio device settings.

Though just a little improvement, seemed worth a short update.

Cheers.

6 Responses to “LadioCast 0.11.5 Released – LadioCast Development Notes No.88”

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*


LadioCast 0.11.4 Released – LadioCast Development Notes No.87

in LadioCast

LadioCast Version 0.11.4 has been released.

Changes from version 0.11.3 to 0.11.4 are as follows:

  • Added Ogg PCM (32-bit Float) encoding format to the Icecast 2 streamer.

  • Updated libopus library to the latest version 1.1.1.

Specification of the Ogg PCM encoding format in LadioCast follows https://wiki.xiph.org/OggPCM with the exception that numerical values are expressed in little-endian (according to other specifications of Ogg [1]).

So, for example, such a parser extension as James Almer doing on ffmpeg FFmpeg-devel PATCH lavf/ogg: OggPCM demuxing should be rewritten like the following.

ffmpeg/libavformat/oggparsepcm.c
/*
 * PCM parser for Ogg
 * Copyright (c) 2013 James Almer
 *
 * This file is part of FFmpeg.
 *
 * FFmpeg is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * FFmpeg is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with FFmpeg; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

#include "libavutil/intreadwrite.h"
#include "avformat.h"
#include "internal.h"
#include "oggdec.h"

struct oggpcm_private {
    int vorbis_comment;
    uint32_t extra_headers;
};

static const struct ogg_pcm_codec {
    uint32_t codec_id;
    uint32_t format_id;
} ogg_pcm_codecs[] = {
    { AV_CODEC_ID_PCM_S8,    0x00 },
    { AV_CODEC_ID_PCM_U8,    0x01 },
    { AV_CODEC_ID_PCM_S16LE, 0x02 },
    { AV_CODEC_ID_PCM_S16BE, 0x03 },
    { AV_CODEC_ID_PCM_S24LE, 0x04 },
    { AV_CODEC_ID_PCM_S24BE, 0x05 },
    { AV_CODEC_ID_PCM_S32LE, 0x06 },
    { AV_CODEC_ID_PCM_S32BE, 0x07 },
    { AV_CODEC_ID_PCM_F32LE, 0x20 },
    { AV_CODEC_ID_PCM_F32BE, 0x21 },
    { AV_CODEC_ID_PCM_F64LE, 0x22 },
    { AV_CODEC_ID_PCM_F64BE, 0x23 },
};

static const struct ogg_pcm_codec *ogg_get_pcm_codec_id(uint32_t format_id)
{
    int i;

    for (i = 0; i < FF_ARRAY_ELEMS(ogg_pcm_codecs); i++)
        if (ogg_pcm_codecs[i].format_id == format_id)
            return &ogg_pcm_codecs[i];

    return NULL;
}

static int pcm_header(AVFormatContext * s, int idx)
{
    struct ogg *ogg = s->priv_data;
    struct ogg_stream *os = ogg->streams + idx;
    struct oggpcm_private *priv = os->private;
    const struct ogg_pcm_codec *pcm;
    AVStream *st = s->streams[idx];
    uint8_t *p = os->buf + os->pstart;
    uint16_t major, minor;
    uint32_t format_id;

    if (os->flags & OGG_FLAG_BOS) {
        if (os->psize < 28) {
            av_log(s, AV_LOG_ERROR, "Invalid OggPCM header packet");
            return -1;
        }

        major = AV_RL16(p + 8);
        minor = AV_RL16(p + 10);

        if (major < 1 || major > 255) {
            av_log(s, AV_LOG_ERROR, "Unsupported OggPCM version %u.%u\n", major, minor);
            return -1;
        }

        format_id = AV_RL32(p + 12);
        pcm = ogg_get_pcm_codec_id(format_id);
        if (!pcm) {
            av_log(s, AV_LOG_ERROR, "Unsupported PCM format ID 0x%X\n", format_id);
            return -1;
        }

        priv = os->private = av_mallocz(sizeof(*priv));
        if (!priv)
            return AVERROR(ENOMEM);
        st->codec->codec_type  = AVMEDIA_TYPE_AUDIO;
        st->codec->codec_id    = pcm->codec_id;
        st->codec->sample_rate = AV_RL32(p + 16);
        st->codec->channels    = AV_RL8 (p + 21);
        priv->extra_headers    = AV_RL32(p + 24);
        priv->vorbis_comment   = 1;
        avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate);
    } else if (priv && priv->vorbis_comment) {
        ff_vorbis_comment(s, &st->metadata, p, os->psize, 0);
        priv->vorbis_comment   = 0;
    } else if (priv && priv->extra_headers) {
        // TODO: Support for channel mapping and conversion headers.
        priv->extra_headers--;
    } else
        return 0;

    return 1;
}

const struct ogg_codec ff_pcm_codec = {
    .magic     = "PCM     ",
    .magicsize = 8,
    .header    = pcm_header,
    .nb_header = 2,
};

Besides that, not mentioned in the change log, the maximum system sample rate of LadioCast has been raised up from 96kHz to 192kHz.

Any comment and suggestion will be appreciated.

Thanks.

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*


LadioCast 0.11.3 Released – LadioCast Development Notes No.86

in LadioCast

LadioCast Version 0.11.3 has been released.

Changes from version 0.11.2 to 0.11.3 are as follows:

  • Updated libshout library to the latest version 2.4.1.

This mostly corresponds to some new functionalities with the recent Icecast 2 server. I’d like to thank the team and users trying the beta LadioCast under 0.11.3.

Hope you have happy holidays!

13 Responses to “LadioCast 0.11.3 Released – LadioCast Development Notes No.86”

    • kawauso

      yukoさんこんにちは!
      (もし途中で送信されてしまったようでしたら続きからまたお書きください。)
      ではでは〜

  1. よっしー

    初めまして!直接メッセージをお送りしたかったのですが、どこに書き込んで良いか分からずこちらに失礼させていただきます。もし不都合があれば消去していただいて構いません。
    LadioCastについての質問です。
    LadioCastのバージョン 000011003 (1133)を使わせていただいております。
    最近になって、音が右側に偏るようになりました。LとRの欄の矢印を触ってしまったのかと思い、確認しましたが普段と変わりありません。Soundflowerと併用して使っていますが、右に偏って聞こえることは初めてです。LadioCastを通さずに音を流してみると通常通り聞こえます。事例を探してもヒットせず、困っています。どうすれば元に戻るのでしょうか。お教えいただけると幸いです。私はOS X Yosemite10.10.4です。

    • kawauso

      よっしーさんこんにちは!
      書き込む場所はここでOKですよ。
      右に偏って聞こえる現象を少し分析してからがよさそうですね。
      * LadioCastの入力メーターで左チャンネルのレベルが常に0か、わずかでもレベルがあるか
      * LadioCastの出力メーターで左チャンネルのレベルが常に0か、わずかでもレベルがあるか
      * 右チャンネルの出力音声は左チャンネルの音声も含むか、含まないか
      * LadioCastを通さずに音を流す時にSoundflowerを通るか、通らないか
      といったポイントをチェックしてみてそれらの結果をまたお書きいただければと思います。
      ではでは。

  2. よっしー

    こんにちは!返信ありがとうございます!
    初心者でいまいち理解できておらず、拙い日本語になりそうですが…申し訳ありません
    とにかくお伝えできる設定状況は全てお教えしようと思います。

    * LadioCastの入力メーターで左チャンネルのレベルが常に0か、わずかでもレベルがあるか
    └0dbと表記されている部分であっていますでしょうか…そこは0のままで、左右に動かせるバーは一番右に設定しています。入力1と2を使用していて、どちらも0dbでバーは左です。
    * LadioCastの出力メーターで左チャンネルのレベルが常に0か、わずかでもレベルがあるか
    ごめんなさい、勉強不足でどこを指しているか理解できず…。多分0であると思います。
    * 右チャンネルの出力音声は左チャンネルの音声も含むか、含まないか
    入力1にマイク、入力2にSoundflower(2ch)を設定していますが、入力1のことでしょうか…?普段は入力1は使わず、N/Aにしています。入力2の音はは内臓出力設定にしている「出力メイン」と、Soundflower(64ch)に設定している出力Aux1に流れています。
    * LadioCastを通さずに音を流す時にSoundflowerを通るか、通らないか
    └通さず、ヘッドフォンを使用しているため、ヘッドフォンポートに流れています

    あと、ヘッドフォンが壊れているのかと思い別のものを使用して確認しましたが、それが原因でなかったことをお伝えします。
    わかりにくくて申し訳ありません。よろしくお願いいたします…

    • kawauso

      よっしーさん
      回答ありがとうございます。推測を含んでしまいますがこの状況で一番可能性が高いのはSoundflowerの方の左チャンネル(1)の音量設定かなと思います。
      Macの標準アプリにAudio MIDI 設定.appというものがあり、起動するとSoundflowerデバイスの入力・出力それぞれについて、左・右そして主音量の設定を見ることができます。
      それらが全てフルに設定されたままかどうか見てみてください。フルだった場合はまたここにお書きください。
      ではでは。

  3. よっしー

    こんばんは!
    Kawausoさんのおっしゃった通り、Audio MIDI 設定.appを開き、確認したところSoundflwer(64ch)の入力の項目一つがフルになっておらず、一番右端までバーを動かしたところ直りました!
    拙い説明であったにもかかわらず色々と親身に教えてくださりありがとうございました。
    感謝の気持でいっぱいです…!ありがとうございました!!

  4. よっしー

    こんばんは!
    音声が右側に寄る原因がわかりましたので報告させていただきます。
    GarageBandのリアル音源トラックで、録音レベルを触ると音声が右に傾きました。
    自動レベルコントロールにするとバーに合わせて傾きました。なぜ連動しているのかはわかりませんが、一応参考までに報告させていただきました。

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*


Beta testing wanted for the libshout 2.4.1 and SSL – LadioCast Development Notes No.85

in LadioCast

The libshout has been updated from 2.4.0 to 2.4.1 and in the previous version I have missed making SSL enabled.

People who want to test the new beta version, download it from the following link; LadioCast-0.11.3beta.app.zip. This binary is valid until the end of the year.

See also the previous article for more information.

2 Responses to “Beta testing wanted for the libshout 2.4.1 and SSL – LadioCast Development Notes No.85”

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*


Beta testing wanted for the libshout 2.4.0 – LadioCast Development Notes No.84

in LadioCast

Recently the icecast client library libshout has been updated from 2.3.1 to 2.4.0. The coming version of LadioCast will link the new library. Before that, in order to measure the degree of the impact, I made a beta test version which simply replaced the linked library.

People who want to test the beta version, download it from the following link; LadioCast-0.11.3beta.app.zip.

I hope you will see normal (or abnormal) behaviors on it. In any case, comments below or e-mails are greatly appreciated.

Thank you.

2 Responses to “Beta testing wanted for the libshout 2.4.0 – LadioCast Development Notes No.84”

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*