Yes, I just released the first rough version of my English number listening practice APP: English Number
Why An English Number App?
I m having my NAATI class recently, it is a course that helps you practice to be an interpreter. I’m doing English-Mandarin interpreting.
The practice is usually based on a dialogue conducted by an English speaker and LOTH speaker. What I will do is interesting the content from the English speaker to Mandarin and the other way around, one by one.
During the exercises, I found that I was very bad at listening to numbers in English! I will mess up “3”, “6” and “7”, whose pronounces all have similar beginnings!
Besides, since my mother tongue is Mandarin, I couldn’t help translating the number to Mandarin first in my head after I heard the number, which delayed the whole process!
I need practices, a lot of practices!
So I searched the internet for English number listening test, I found some websites but none of them meet my requirements:
- large random test numbers
- can have very large numbers
- maybe can support phone number/date/address as well!
- support both desktop and mobile browsers (quite important for people who lack time for studying!)
I was not happy about what I had found, so I decided to make one myself!
Number Speech Voices
Well, to make such an app, the core part is how can we get all the number speeches (voices) to play, recording all the voices by myself is not an option for me.
Then I came up with the AWS service Amazon Polly – Lifelike Text-to-Speech:
I have played around with it before, and it actually has a very wide range of accents to choose and its pricing is very good as well:
Free Tier: The Amazon Polly free tier includes 5 million characters per month for speech or Speech Marks requests, for the first 12 months, starting from the first request for speech. Polly Pricing: Pay-as-you-go $4.00 per 1 million characters for speech requests (when outside the free tier)
For me, I just need to create all these voices once and save all the files on S3!
So I did a little google and found an AWS client for python named GitHub – boto/boto3: AWS SDK for Python, the code to get voice file out of a number is quite simple:
import boto3
import random
from config import AWS_ACCESS_KEY_ID, AWS_REGION_NAME, AWS_SECRET_ACCESS_KEY
# Set Up the AWS Client
client = boto3.client(
'polly',
region_name=AWS_REGION_NAME,
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
)
# Get all available accents!
def get_available_voices(language_code):
response = client.describe_voices(
LanguageCode=language_code,
)
return response.get('Voices')
def get_available_english_voices():
codes = ['en-AU', 'en-GB', 'en-GB-WLS', 'en-IN', 'en-US']
voices = []
for code in codes:
voices += get_available_voices(code)
return voices
available_voice_ids = [voice.get('Id') for voice in get_available_english_voices()]
# Request for the voice!
def text_to_voice(text):
return client.synthesize_speech(
OutputFormat='mp3',
Text=text,
TextType='text',
VoiceId=available_voice_ids[random.randint(0, len(available_voice_ids) - 1)]
)
Before I request for a voice, I get all the available accent for English first, and every time I request for a voice, I randomly choose an accent.
Apart from this part, I create another very simple function just to create random numbers, you can specify the minimum and maximum number and how many numbers you want to generate:
import random
def generate_numbers(amount, min_value=0, max_value=0):
result = []
for i in range(0, amount):
result.append(random.randint(min_value, max_value))
return result
So finally I created a huge number of number voice files, and I also save all available numbers in a JSON file.
You can find all related code here
Set Up The Cloud To Serve Files
So before I start to write more code, I registered a new domain: english-number.com
in Managed Cloud DNS – Domain Name System – Amazon Route 53 | AWS, the reason to use Route 53 is that it will be easy to integrate with other services like S3 and CloudFront in AWS.
The next step is I set up two S3 buckets. One named voice.english-number.com
serving all the voice files and the other named english-name.com
serving all the static files (HTML/JS/CSS) for the app itself!
Since I will not change the voice files again (maybe in the future), I just manually updated all the files to S3 and didn’t bother to write a script or CI to do it.
Build The App
All the code is open sourced GitHub – neekey/English-name-app: An awesome app helping you practice your English listening skill for English numbers, dates, and addresses.
So this was more an interesting and also tedious process for me. The interesting part was that I would be able to make all the features in my mind alive, but since I am a front-end web developer, all the coding work seems a little boring to me.
The whole app is very simple, it has a big JSON vocabulary file, which includes all the available numbers in S3, and I wrote a utility function to generate the voice URL based on a given number.
Then for every test round, from the huge list, it randomly creates a list and renders all these numbers one by one to users.
It is a very typical single page web application with all these popular techs:
- React
- React-router
- Webpack
- Babel
You know what I mean!
Do A Little Marketing
Well, apparently this little app is very unlikely to bring me much profit, so the reason that I still want to do some marketing is more just for experiment. If you are reading this, that is part of the experiment : )
I also setup https://adwords.google.com for it, the advertisement looks like bellow:
I also set up a facebook page English Number Community – Home | Facebook, and Boosted this post, the result so far (not good) is:
According to the final clicks got from these Google and Facebook, I would say Google AdWords is actually more effective to get clicks but it cost more money as well!
I also set up the Google Analytics, the current Page View was like 20ish, since I just lowered down my budget for Google. 20 sounds a terrible number for marketing, but it is just the matter of how many money you spend on it, currently, I spent like 2 AUS dollar per day, you can imagine how much traffic you can get if you have enough budget to do marketing.
Another result that quire surprised me was that the most visitors are from India:
What Is Next?
I will definitely improve the app constantly, and keep on doing the marketing stuff as well. At the meanwhile, I have a lot of other small ideas that I want to make as well, some of them are:
- Facial / Body Recognition: According to user’s choices I will recommend more faces or bodies of the same type (this will be used in the dating app that I want to build)
- School Spot: Difficult to find a spot to work or study? This app will give you all the good spot with WIFI, power point and drink info!
- You Daily Supermarket Sales: This is quite like Cheap Deals, Best Hot Daily Deals, and Coupons by Deals2buy.com on 2017-07-26 but more focus on local supermarkets and daily groceries.
3 Comments
Interesting and very inspiring. Awesome~ keep doing!!
Recently I am also working on the frontend desgin as a side project. I would also like to put my ideas(an app and webiste at this moment) into practise through my own hand.
Thank you @tencyclopedia.
I really enjoy building stuff for myself, and hope you can build yours too : )
I will mess up “3”, “6” and “7” too.
It would be great if i could customize it to only practice these numbers