Elevenlabs

Elevenlabs

generator in kwik visual editor for example sync text & audio

  • GitHub/lua-mecab-master/test.lua
  • server/tests/elevenlabs_post.http
  • editor/tests/suite_page2_sync2audio.lua

Steps

  1. input text
  2. mecab.command
  3. post elevenlabs
  4. save files in tmp
  5. copy.command to App/book/assets
    • .mp3
    • .txt

steaming

video


mecab

  1. mecab –output-format-type=wakati

    echo "Elevenlabsへようこそ! \n以下の再生ボタンをクリックして、このテキストを日本語の音声に変換してください。ドロップダウンメニューを使用して、自分のテキストを追加したり、声をカスタマイズしたりできます。\n" | mecab --output-format-type=wakati
  2. output with linebreaks

    Elevenlabs へ ようこそ !
    以下 の 再生 ボタン を クリック し て 、 この テキスト を 日本語 の 音声 に 変換 し て ください 。 ドロップダウンメニュー を 使用 し て 、 自分 の テキスト を 追加 し たり 、 声 を カスタマイズ し たり でき ます 。
  3. escape linbreaks with \n

    Elevenlabs へ ようこそ ! \n以下 の 再生 ボタン を クリック し て 、 この テキスト を 日本語 の 音声 に 変換 し て ください 。\n ドロップダウンメニュー を 使用 し て 、 自分 の テキスト を 追加 し たり 、 声 を カスタマイズ し たり でき ます 。
  4. convert it to timecodes with elevanlabs

    httpYac

    POST /text-to-speech/{{voice_id}}/with-timestamps
    xi_api_key:xxxxxxxxxxxxxxxxxx
    Content-Type: application/json
    
    {
      "text": "Elevenlabs へ ようこそ ! \n以下 の 再生 ボタン を クリック し て 、 この テキスト を 日本語 の 音声 に 変換 し て ください 。\n ドロップダウンメニュー を 使用 し て 、 自分 の テキスト を 追加 し たり 、 声 を カスタマイズ し たり でき ます 。",
      "model_id": "eleven_multilingual_v2",
      "voice_settings": {
        "stability": 0.5,
        "similarity_boost": 0.75
      }
    }
    
    >>! ./outputRedirection_jp.json

    output

    • test_decode64_words()

      • character_start_times_seconds
      • character_end_times_seconds
    • test_decode64_mp3()

      • udio_base64

=>

0       1.242   Elevenlabs
1.335   1.405   へ
1.509   2.067   ようこそ
2.09    2.415   !
2.415   2.415   \n
2.589   2.74    以下
2.833   2.891   の
3.146   3.425   再生
3.541   3.75    ボタン
3.808   3.878   を
3.994   4.365   クリック
4.458   4.481   し
4.702   4.83    て
5.062   5.062   、
5.201   5.375   この
5.468   5.886   テキスト
5.956   6.002   を
6.118   6.49    日本語
6.618   6.641   の
6.838   7.036   音声
7.129   7.152   に
7.372   7.581   変換
7.651   7.674   し
7.732   7.779   て
7.872   8.336   ください
8.754   8.754   。\n
8.754   8.754
8.905   9.915   ドロップダウンメニュー
10.008  10.077  を
10.228  10.449  使用
10.542  10.565  し
10.762  10.879  て
11.076  11.076  、
11.25   11.413  自分
11.494  11.552  の
11.645  12.028  テキスト
12.086  12.167  を
12.376  12.516  追加
12.597  12.62   し
12.736  13.05   たり
13.305  13.305  、
13.642  13.642  声
13.758  13.827  を
13.978  14.547  カスタマイズ
14.64   14.663  し
14.768  15.047  たり
15.186  15.348  でき
15.499  15.65   ます
  function M.xtest_decode64_words()
    local json = require("json")
    local mime = require("mime")
    local path = "server/tests/outputRedirection.json"
    local data = json.decode(util.jsonFile(path))
    local alignment = data.alignment
    local normalized_alignment = data.normalized_alignment

    print(#alignment.characters, normalized_alignment.characters)
    local wordEntries = {}
    local word  = ""
    local s, e = 0, 0
    for i, v in next, alignment.characters do
      word = word ..v
      if v == " " or v =="\n" then
        e = alignment.character_end_times_seconds[i]
        wordEntries[#wordEntries + 1] = {word=word, startTime=s, endTime =e}
        local t = word:gsub("\n", "\\n")
        print(s, e, t)
        word = ""
        s = alignment.character_end_times_seconds[i+1]
      end
    end
    local dst = system.pathForFile( "myAudio.txt", system.DocumentsDirectory )
    -- Open the file handle
    local file, errorString = io.open( dst, "w+" )
    if not file then
        print( "File error: " .. errorString )
    else
        for i, v in next, wordEntries do
          local text = v.word:gsub("\n", "\\n")
          file:write(string.format("%.3f %.3f %s \n",  v.startTime, v.endTime, text ))
        end
        io.close( file )
    end

    -- character_start_times_seconds
    -- character_end_times_seconds
  end


  function M.xtest_decode64_mp3()
    local json = require("json")
    local mime = require("mime")
    local path = "server/tests/outputRedirection.json"
    local data = json.decode(jsonFile(path))
    local bin = mime.unb64(data.audio_base64)
    local dst = system.pathForFile( "myAudio_jp_wakati.mp3", system.DocumentsDirectory )
      -- Open the file handle
    local file, errorString = io.open( dst, "wb+" )
    if not file then
        print( "File error: " .. errorString )
    else
        file:write( bin )
        io.close( file )
    end
  end