Duo3.0:再生の速度を上げました。

 こんにちは。Duo3.0を使った英語学習を続けております。前日記に書きました通り苦手例文を集めたフォルダを作成し、そこを集中して聴く、という方法です。
 しかし、Duo3.0だけをやる、というのも飽きがくるものでして、最近は『TED』で公開されている英語によるスピーチを聞いたりしています。ここをご覧になって下さる方ならご存知の方も多いとは思いますが、こちらです。

http://www.ted.com/talks?language=ja

で、その印象です。

1.講演者にもよりますが、ネイティブさんの話すスピードは速いです。話すスピードの速いネイティブさんの場合、英文のScriptを見ながら聴いてもまったく追いつかないです。下手をするとScriptの一行がペロンと一気に進むので、ワケワカランです。子音がタララララッと流れてハイお終い、そんなイメージを感じました。英語が子音言語なのだと実感しました、ふぅ。

2.非ネイティブさんの話す速度は比較的ゆっくりで、センテンスをきちんと聞き取れる場合も時々あります。聞き取れると「やったぁ」と感激します。

3.Duo3.0で覚えた英語がドンドン出てきます。学習の効果が実感できて嬉しい瞬間です。頑張った分だけ報われるのですね!

4.それでも知らない単語が頻発します。時事用語だの専門分野の言葉だので知らない単語が出るのは納得いきますが、そうではない、日常会話で普通に使いそうな単語で知らないのが出てくると気持が落ちます。まだ道のりは遠いなぁ、と実感してしまいます。

で、今日の本題です。
 Duo3.0の音源ですが、学習を始めたばかりの頃は、「とてつもなく速い」と感じておりました。ですが学習を行った結果、何とか聞き取れるようになり、「速い」という感覚も薄らぎました。
 しかしTEDのスピーチを聴きました。そして知りました。Duo3.0の音源は、実はとても丁寧に、そしてゆっくりと話しているのだということを。

 で、Duo学習の実質的な効果を上げるために、再生の速度を上げることにしました。自分の感覚では120%くらいに上げるとTEDの非ネイティブさんの話す速度をカバーできる感じです。でも、今の自分にはちょっと敷居が高いので、現在はまだ110%にしています。速度を上げると難易度が上がりますが、「英語っぽさ」も上がる感じです。

ではでは

 

Duo3.0:英訳は出来ませんでした

 こんにちは。Duo3.0を利用した英語学習を続けています。

 前日記では、次の目標を「和訳から英文」への変換を出来るようにする、などと書きましたが、アッという間に挫折しました。(笑)
 ハイ、私は英訳に手を出すには、まだ実力が不足していました。
 で、英訳がちっとも出来ない原因は、Duoの例文がまだ腹に落ちた知識になっていないからだと考えて、目標を変えました。
 その目標は、「英文を聴いて、日本語を介さずその意味を理解する」です。言葉を変えると、560個の英文を「 "Natto" smells awful」と同じ感覚で聴けるようにするということです。

 それを実現するための具体的な方法はこうです。
 まず、時間に余裕がある時、560の例文を通しで聴きます。その時に、苦手と感じた例文の番号をメモしてゆくのです。そしてスマホに「苦手例文フォルダ」を作り、その中にメモした番号のMP3をコピるのです。あとは隙間時間でも利用して、フォルダ指定で再生し、苦手例文だけを集中して聴くのです。
 全例文を聴く必要がない分、効率的に学習できていると実感しています。それにしても例文毎に細分化したMP3に歌詞を入れておいて本当に良かった。だって選抜した例文の再生であっても、スマホの画面を見れば英文も和訳も即座に確認できるのですから(自画自賛すみません)。

 なお、例文を選択する時の「苦手フィルタ」は状況に応じて変えていく予定です。今はまだ始めたばかりですので「英文を聞き取れたか」を条件にして選抜しています。しかしそれをクリアしたら「即座に意味が判ったか」にするでしょうし、最終的には「日本語を介さず理解できたか」にするでしょう。

 ではでは。

 

DUO3.0 歌詞の正誤表を作りました

 ここでご紹介させて戴きました歌詞付きMP3を利用しながら、Duo3.0を使って英語の学習を進めております。今、間もなく二周目が終わる所です。
 一周目は、知らない単語を覚えることと、不完全ながらも音を何とか聞き取ることを目標にしました。具体的には;
・知らない単語が出たら三回ほど紙に書くorキーボードに打ち込む。
・文法的に難しく感じた例文は、書き写す。
・速度80%にした音源から、多少不正確でも単語を拾えればいい、くらいの感覚で音を聞く。
という観点で勉強しました。一日1セクションを目標にしましたけど、時間が取れない日もあって、結局二ヶ月半ほどかかりました。

 二周目は、着眼点を変えて勉強しました。具体的には;
・覚えた単語、もしくはすぐに忘れちゃった単語をもう一度見て、記憶の定着を図る。
・単語よりも熟語に着目して例文を読む。例えば一周目の時には素通りした「I'm afraid I'm coming down with something.」なんて英文を、"come"の本来の意味合いを確認しながら読みました。
・速度は80%のままですが、音を正確に聞き取りました。冠詞の"a"や"the"、語尾の"s"や"ed"、そしてリエゾンを確認しながら聞きました。
二周目は、二ヶ月半もかかった一周目よりずっと早く、10日ほどで終わりそうです。
 三週目の予定は、いよいよ「和->英」への挑戦と、速度100%での聞き取りを目標とする予定です。

 さて本日の本題です。過去日記にて「歌詞」として紹介させて戴きました、ネットに公開されているCSVやエクセルですが、若干のスペルミス等がありました。
(念のため申し添えますが、作者さんには感謝の気持で一杯です。スペルミスを非難する気持など微塵もございません)
簡単なアプリを作成して正誤表を出力いたしましたので、ここに公開いたします。

 <追記:No78,No236を追加(3/3)>

<追記:No304を二つ追加(3/9)>

 

例文NO単語NO原文訂正
30 13 through thorough
43 4 concult consult
54 3 classfield classified
78 8 "Im "I'm
105 5 trasparent transparent
112 2 sonner sooner
181 12 ato at
236 16 asid acid
265 8 ablilty ability
265 11 unutual unusual
272 5 quantitiy quantity
282 3 wasnt wasn't
293 5 conclution conclusion
302 2 prastic plastic
304 4 ofen often
304 7 shttle shuttle
335 8 Universitiy, University,
389 2 condidate candidate
389 4 disapointed disappointed
390 2 minicipal municipal
398 5 bureaucreats bureaucrats
412 6 bibid vivid
451 10 inpose impose
468 1 468.Infomed 468.Informed
468 6 breadhed breathed
468 8 sign sigh
486 7 speak speaks
545 12 adcantage advantage

Duo3.0のMP3に歌詞を挿入する作業環境と手順

 前の日記を書きまして、自分の備忘録みたいな内容だし、ある意味ニッチな話題だし、ワザワザ見に来て下さる方なんていないだろうと高を括っておりましたら、思ったよりもアクセス戴きましてちょっとビックリしました。
 しかし、折角来て下さったのに、Javaの実行環境がわからずUターンをした方もいらっしゃるのではないかと思うと、なんだか申し訳のない気分になってしまいました。
 そこで、実行環境の簡単な作り方を書いておきます。
以下のホームページは、「eclipse」というJavaの開発環境をインストールして、Java言語で「HelloWorld」という文字を画面に表示させるまでの方法を解説しています。

https://blog.codecamp.jp/eclipse

このストーリーに手を加え、mp3に歌詞を挿入する方法をご紹介します。なお、Java言語の学習が目的ではないので、ホームページ冒頭の「eclipseって何ぞや」を解説した部分は読み飛ばして戴いて結構です。実際の作業が始まる「Eclipseの導入(Windows)」の所から読み始めて作業に取り掛かればOKです。

<作業を開始する前にやっておくこと>
1.mp3操作用ライブラリを、前日記で書いたサイトからPCに落とす。具体的には、最新版の「binary jar file」をダウンロードして保存する。今日の時点ではこれです。
http://www.beaglebuddy.com/content/downloads/mp3/3.12/beaglebuddy_mp3.jar

2.前日記の通り、560個のmp3ファイル(001.mp3~560.mp3)を作成し、所定フォルダ (C:\tmp\mp3\)に置いておく

3.前日記の通り、560行の英文と和訳のテキストファイル(en.txt と ja.txt)を作成し、所定フォルダ(C:\tmp\txt\)に置いておく

<本日の主題>
1.上でご紹介した「【入門編】Eclipseを使ったJavaプログラミングを基礎から解説」をご覧になって、書いてある通りの操作を進めて下さい。
 ただし「これでプロジェクトが作成されます。」の所まで完了したら、ホームページにはない下記の操作を実施します。

(1)右側のツリーでプロジェクト名「HelloWorld」にカーソルを合わせて右クリック
(2)「プロパティー」を選択(これで下のスクリーンショットが出るはずです)
(3)左側の「Javaのビルドパス」を選択
(4)上部のタグで「ライブラリ」を選択
(5)右側の「外部Jarの追加」ボタンを押す
(6)先ほどダウンロードした「beaglebuddy_mp3.jar」を選ぶ
(7)OKしてこの作業は終了です

f:id:mr_sorao:20161216111851j:plain

2.ホームページの「次にクラスを作りましょう。」を実施します。ですが一箇所だけホームページの作業と違うことを実行します。
ホームページの写真で;

名前(M):Main

となっている箇所がありますよね。赤丸で囲まれた箇所に「Main」という文字を入力するように案内されております。ここに入力する文字ですが。"Main"ではなく、"DuoMp3LyricsInserter"と入力して下さい。スペルを間違えるとドツボにはまりますのでコピペして下さいね。そこだけ変更して作業します。

f:id:mr_sorao:20161216142630j:plain

3.次に進みます。ホームページでは「追記するのはmainメソッドの中です。次のように書き換えましょう。」となっていて、「System.out.println("Hello, World");」と入力する手順になっています。この作業を以下の通りに変更します。

プログラムソースの上部の;

package hello_world;

という一行だけを残し、その他の行をすべて削除します。

残した一行の下に、前日記のプログラムソースをコピペで貼り付けます。(最後の "}" という文字までしっかりとコピーして下さいね)

f:id:mr_sorao:20161216113927j:plain

4.いよいよ最後のステップ「実行」です。ホームページと同じ作業を実施して下さい。

 (実行を開始してから数十秒時間がかかりますが)「HelloWorld」という文字が表示される代わりにDuoの歌詞が表示されれば成功です。

 

f:id:mr_sorao:20161216131021j:plain

Duo3.0:560個の歌詞付きMP3の作成

f:id:mr_sorao:20161216141359j:plain

 最近、一念発起して英語の学習を始めました。
使っている教材は『Duo3.0』、選んだ理由は、「定番だから」です。

 さて、ネットを見ると、リスニング用CDからiPhoneに音源を転送して、電車の中などで手軽に学習をするという素敵な学習の方法が載っております

やってみたいけど・・・、自分のスマホAndroid・・・

 ネットの情報では、NHKの『語学プレイヤー』というアプリを使えばAndroidでもいい具合に再生できる、ということなので、まずはそれを試してみました。

 しかし問題が・・・。私はネットの情報を利用して560個に分割したmp3を作成して使ったのですが、細かく分割されたmp3は歌詞を含んでいないのです。しかし私は耳で聴くだけではなく、英文も和訳もその場で見たいのです。

 ネットで紹介されているDuo3.0の音源に歌詞を挿入する手段としては、Duo3.0の45章のセクション別にmp3を作り、出来上がった45個のmp3に手作業で歌詞を挿入するという方法があります。でもその方法では一つのフレーズをリピートして繰り返し聞く、という操作がスムースには出来ません(A地点B地点を設定してリピートとか面倒です、私はワンタッチで操作したいのです)。一方、私の語学力では英文を見ながら一つのフレーズを何度も繰り返して聴く必要があるのです。

 だからと言って、560個のmp3の全てに手作業で歌詞を挿入するなんて、想像しただけで気が遠くなります。

 ・・・ということで、560個のmp3に歌詞を挿入するアプリを作りました。

使った言語はJavaです。
そのソースを公開します。

 プログラム経験が全く無い、という方には稼働環境を設定するのが難しいかもしれませんが、コンパイル・クラスパス・そして実行などの概念が判る方でしたら、560個の歌詞付きMP3が簡単に出来上がるかと思います。

 追記:次日記にJava実行方法の説明を書きました

<完成したmp3の動作について>
・JetAudioPlusというアプリで快適に動作します(冒頭のスクリーンショット)。これが私が使っているアプリです。このアプリは500円程の有料アプリです。速度調整は50%から200%、一曲(ワンフレーズ)リピート、アルバムリピート(セクション別連続再生)、フォルダを指定しての再生(No1からNo560まで連続再生)、一曲ごとに停止、などの機能があります。音楽再生プレイヤとしても定番ではないでしょうか。
NHKの語学プレイヤーでは残念ながら歌詞の表示ができませんでした。この原因はおそらくmp3のタグのバージョンの不一致だと思います。語学プレイヤーが理解できるタグのバージョンは何であるのか、検索して探してみたのですが、残念ながらその情報を入手することは出来ず、その時点で語学プレイヤーの利用は諦めました。
iPhone等は持ってないのでわかりません。でもきっと動くという予感がします。

追記:知人のiPadで、歌詞が表示されることを確認できました。iTuneってmp3を直接読むのではなく、iTune画面にmp3をドラッグ&ドロップすると、何やら変換処理らしきものが作動して、その成果物を読み込むのですね。知らなかった、無知ですみません。

<使用したmp3操作用ライブラリについて>
こちらを使いました。ホームページのサンプルコードを見て、「あら簡単」と思ったのでこいつを使うことにしました。
http://www.beaglebuddy.com/
ダウンロードしてJava環境に放り込んで下さい。

<作業概要>
1.Duo3.0のCDから560個のmp3を作る。作り方はこちらのサイトなどを参考にして下さい。
https://eigonokai.jp/duo30-splitting-method/
http://dokugakueigo.com/how-to-study-duo2/

 「001.mp3~560.mp3」と名前がついた560個のmp3が完成したら、 "C:\tmp\mp3\" というフォルダを作ってそこに置いて下さい

2.英文と和訳のテキストファイルをそれぞれ作って下さい。
 歌詞の作成元データは、「Duo3.0 歌詞」というキーワードでGoogle先生に聞いて下さい。

 私はこちらの情報を頼りに

http://review.1hiro.net/syo-ga-1.html

 エクセル形式の歌詞を入手し、エクセルを開き列幅を思いきり広くしてから「名前を付けて保存」でprn形式を指定して保存したファイルを活用し作成しました。CSV形式で保存したファイルを利用するのでは、妙な位置にダブルクォーテーションが入ってしまうのが嫌でしたので。でも最もシンプルなテキストファイルの作成方法としては、DUO歌詞のエクセルとメモ帳を左右に並べて開いておいて、エクセルから歌詞をコピーしてメモ張に貼り付ける、という方法が挙げられますね。

 英文は「en.txt」、和訳は「ja.txt」という名前にして、 "C:\tmp\txt\" というフォルダを作ってそこに置いて下さい。文字セットはWindowsのデフォルト「Shift-JIS」のままで作成して下さい。

 テキストファイルを作成したら、念のため、560行になっていることはきちんと確認して下さいませ。アプリはそこまで確認していませんので。

3.Javaアプリケーションをコンパイルして実行です。もしもeclipseを使っているのなら、ソースファイルにマウスを置き、右クリック-実行-Javaアプリケーションの実行を行うだけです。

< ソースです( DuoMp3LyricsInserter.java ) >

 

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.DecimalFormat;

import com.beaglebuddy.mp3.MP3;

public class DuoMp3LyricsInserter {

    private static final int S_NUMBER = 1;
    private static final int E_NUMBER = 560;
    private static final String EN_FILE_NAME = "en.txt";
    private static final String JA_FILE_NAME = "ja.txt";
    private static final String TXT_DIR = "c:\\tmp\\txt\\";
    private static final String MP3_DIR = "c:\\tmp\\mp3\\";
    private static final String TXT_CHARSET = "Shift-JIS";
    private static final String MP3_CHARSET = "UTF-16";

    private static BufferedReader en_reader;
    private static BufferedReader ja_reader;

    private static String album = "";
    private static int countInAlbum = 0;
    private static boolean hasErrors = false;

    public static void main(String[] args) {
        try {
            /*
             * テキストファイルのオープン、"en.txt"と"ja.txt"が用意されている前提
             */
            File en_f = new File(TXT_DIR + EN_FILE_NAME);
            File ja_f = new File(TXT_DIR + JA_FILE_NAME);
            en_reader = new BufferedReader(
                          new InputStreamReader(
                            new FileInputStream(en_f),
                            TXT_CHARSET
                          )
                        );
            ja_reader = new BufferedReader(
                          new InputStreamReader(
                            new FileInputStream(ja_f),
                            TXT_CHARSET
                          )
                        );
            /*
             * 各MP3ファイルを更新します
             */
            for(int i = S_NUMBER; i <= E_NUMBER; i++ ){
                duoLyricsInsert(i);
            }
            /*
             * テキストファイルのクローズ
             */
            en_reader.close();
            ja_reader.close();
            /*
             * 更新後のMP3ファイルの歌詞を表示する
             */
            for(int i = S_NUMBER; i <= E_NUMBER; i++ ){
                duoLyricsDisplay(i);
            }
            if (hasErrors) {
                System.out.println(" Error Occured Anywhere");
            }
            else {
                System.out.println(" NO-ERROR Good Job!!");
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void duoLyricsInsert(int i) throws IOException {
        /*
         * "001.mp3" - "560.mp3" を更新する前提でファイル名を生成
         */
        DecimalFormat formatter = new DecimalFormat("000");
        /*
         * MP3ファイルを取得
         */
        MP3 mp3 = new MP3(MP3_DIR + formatter.format(i) + ".mp3");
        /*
         * テキストファイルの1レコード取得
         */
        String en = en_reader.readLine();
        String ja = ja_reader.readLine();
        /*
         * 同一アルバム内の曲順計算
         */
        if (!album.equals(mp3.getAlbum())) {
            countInAlbum = 0;
            album = mp3.getAlbum();
        }
        countInAlbum++;
        /*
         * 歌詞を生成
         */
        StringWriter buffer = new StringWriter();
        PrintWriter writer = new PrintWriter(buffer);
        writer.println();
        writer.print("[");
        writer.print(album);
        writer.print("(");
        writer.print(countInAlbum);
        writer.print(")]-[");
        writer.print(mp3.getTitle());
        writer.print("]");
        writer.println();
        writer.println();
        writer.println(en);
        writer.println();
        writer.println(ja);
        String lyrics = buffer.toString();
        /*
         * 取得したMP3ファイルのタグに歌詞を挿入(UTF-16エンコード)
         */
        mp3.setLyrics(new String(lyrics.getBytes(MP3_CHARSET), MP3_CHARSET));
        /*
         * MP3ファイルを更新
         */
        mp3.save();
    }

    private static void duoLyricsDisplay(int i) throws IOException {
        /*
         * "001.mp3" - "560.mp3" を更新する前提でファイル名を生成
         */
        DecimalFormat formatter = new DecimalFormat("000");
        /*
         * MP3ファイルを取得
         */
        MP3 mp3 = new MP3(MP3_DIR + formatter.format(i) + ".mp3");
        /*
         * MP3ファイルの番号・エラーの有無・歌詞を表示する
         */
        System.out.print(i);
        if (mp3.hasErrors()){
            System.out.println(" ERROR");
            hasErrors = true;
        }
        else {
            System.out.println(" OK");
        }
        System.out.println();
        System.out.println(mp3.getLyrics());
        System.out.println();
    }
}