(X) Hide this
    • Login
    • Join
      • Say No Bots Generate New Image
        By clicking 'Register' you accept the terms of use .

Windows Phone 8: Voice Commands

(3 votes)
Peter Kuhn
>
Peter Kuhn
Joined Jan 05, 2011
Articles:   44
Comments:   29
More Articles
11 comments   /   posted on Feb 25, 2013
Categories:   Windows Phone

Part of the last article was a detailed look at the possibility of speech recognition from within your app. A logical continuation of this technology and feature is to seek deeper integration with the operating system by using voice commands. Voice commands are a way for you to register certain phrases with the Windows Phone OS that are recognized when the user invokes the built-in voice recognition, without your app being active or even launched. In this article I will explain what it takes to use this feature, and what you can achieve with it.

Voice Commands Explained

Typically, your application will be used for a limited set of operations, with the same actions executed all the time. Let's say you have created some sort of news reader, then the most common action probably will be that the users launch the app, navigate to the unread items, and then start reading the new available content. If your app searches for points of interest in the local area, users will launch it, navigate to the search page and enter their search term, then look through the results. In all these situations, it can become quite annoying to perform these individual steps over and over again, even if it only requires a handful of taps and swipes. Wouldn't it be great to have shortcuts for this?

One way to create those shortcuts on the phone is to use secondary tiles. These allow the user to pin commonly used pages or functionality of your app to their start screen, which then can be invoked directly, without e.g. going through an application's menu first. Secondary tiles are still quite limited and static though, in the sense that they do not provide a way to pass dynamically changing parameters to your application. This for example is something that can be achieved with voice commands.

Command Structure

As we have learned in the previous part [1] voice recognition is a very complex topic that requires a lot of computational power (which is why it is outsourced to external services), and it also has several implications depending e.g. on the language the user has set their phone to. To provide better recognition results, a common technique hence is to provide fixed phrases that the recognizer can understand more accurately. This is also the way voice commands work. To add more flexibility and make the commands less static, those phrases can be varied in wording slightly, or have variable placeholders. Let's take a look at a typical command as it can be used for voice commands on Windows Phone:

command

The matching algorithm for voice commands expects an identifier that is used to match commands to a particular app. It's important to make that identifier unique to your app so it cannot be confused with other apps or even built-in voice commands of the phone. Obviously though you would want to make the command your app's title or similar. The actual phrase then is compared to the phrases defined by the app to determine what command should actually be invoked. Let's take a look at the decomposition of that command itself:

phraseAfter matching the command to your app, the amount of possible matches for the phrase has narrowed down tremendously already (only phrases defined in your app will be recognized). To aid further in the recognition process, in this case "poke … gorillas" is a static, fixed part defined for recognition. The only degrees of freedom for the recognizer now are optional words like "and" as well as true dynamic values that can take one of a set of values that you can freely define and change over time. In the following paragraphs I'll explain how this translates into the technical details for Windows Phone developers.

Voice Commands on Windows Phone

To enable your app for voice commands, you need to specify the "ID_CAP_SPEECH_RECOGNITION" capability in your manifest, just as explained in the last part [2]. You don't need the microphone capability until of course you plan on using speech recognition from within your app also.

Once set up, you can start with voice commands right away and very easily by adding a new xml file that holds the required definitions. To get you started, an item template for voice command definitions is provided for you:

new_voice_command_definition

The content of a file that can process the above sample command looks like this:

<?xml version="1.0" encoding="utf-8"?>
 
<VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.0">
  <CommandSet xml:lang="en-US" 
              Name="DefaultCommandSet">
    <CommandPrefix>Gorilla Garden</CommandPrefix>
    <Example>poke 3 gorillas</Example>
 
    <Command Name="PokeGorilla">
      <Example> poke 3 gorillas </Example>
      <ListenFor> [and] poke {number} gorillas </ListenFor>
      <ListenFor> [and] poke [a] gorilla </ListenFor>
      <Feedback> Poking gorillas... </Feedback>
      <Navigate Target="Gorillas.xaml" />
    </Command>
 
    <PhraseList Label="number">
      <Item> 1 </Item>
      <Item> 2 </Item>
      <Item> 3 </Item>
    </PhraseList>
 
  </CommandSet>
</VoiceCommands>

One of the important details is to provide a "Name" attribute for your command sets. This unfortunately is not added by default in the template, so make sure to do that manually. If a command set does not have a name, you cannot programmatically access it, and it is also not accounted for when you try to e.g. read the number of command sets that you have already installed on the phone.

Another detail to note is that each command set is associated with a language, in this case US-English. This allows you to specify different commands for all the different languages you expect users to use, which solves some of the basic problems with speech recognition already. Please mind that the number of sets for each language is limited to one, so you have to define all commands for a language in one command set element.

The command prefix definition is used to match a spoken command to your app, just like explained above. The "Example" element just below is used in the UI of the phone when the user starts the voice recognition by holding down the start button of the phone. You may have noticed that there is a question mark button in that default UI. Tap that button and you will be taken to a help screen that e.g. lists all the apps installed on the phone which support voice commands. Here you can read what is written in the "Example" element of your command set:

help_screen

When you tap the entry of an app here, you are taken to further details, in particular the list of supported commands for this app. Each command in turn can have an "Example" element in the definition file, to give the user samples of the command's usage:

help_screen_command

In addition to the example text that is shown in the above UI each command entry can have the following sub elements:

  • "ListenFor": this denotes an actual phrase that is listened for. You can add multiple phrases that differ slightly, for example in the definition file above I've added two versions for singular and plural. Make sure that all phrases are meant to invoke the same logical command, and don't mix in phrases that are actually meant to do something different.
  • "Feedback": when the app is invoked as result of the recognized command, the phone reads back to the user what is defined here.
  • "Navigate": this important element determines what page is being navigated to when your app is launched as a result of a voice command recognition. If you leave out the "Target" attribute, then the configured main page is used. However, you can navigate to sub pages directly (as with secondary tiles, for example), which is used here in the example also.

Phrases can contain two special elements to achieve what has been discussed in theory above:

  • You can add words in square braces to mark them as optional. With the above sample, the command "start Gorilla Garden and poke a gorilla" works equally to simply saying "Gorilla Garden – poke gorilla".
  • By using curly braces, you can add placeholders which are then matched to so-called phrase lists. These are sets of possible values the user can say in place of the markers. In the above sample, a phrase list "{number}" is used. You can also use a special placeholder "{*}" to virtually allow any spoken value, however you won't have access to that value later – it'll only show up as "…" in the recognized result.

I'll return to the topic of phrase lists below, as they play a vital part in making your commands more dynamic.

Registering Voice Commands

Registration of voice commands must be performed from your code. The involved namespace for voice commands is Windows.Phone.Speech.VoiceCommands [3] which currently provides access only to the two classes VoiceCommandService [4] and VoiceCommandSet [5]. The former helps you registering your voice command definition file as well as provide access to already installed (and named) voice command sets. Usually the installation only needs to be performed once, however in certain situations the voice data of your app may be wiped, for example in backup/restore situations. It's no problem to perform the installation e.g. each time your application is started, but you can also try and play a bit nicer, like for example like:

if (VoiceCommandService.InstalledCommandSets.Count == 0)
{
    await VoiceCommandService.InstallCommandSetsFromFileAsync(new Uri("ms-appx:///SampleVoiceCommands.xml"));
}

Note the URI argument that points to the definition file in your app. This is enough for registration, commands can be used right away now, and your application and commands will appear in the help UI of the voice recognition feature on the phone, as shown above.

Working with Phrase Lists

One important thing to remember is that the definition of voice commands and phrases cannot be changed dynamically. The only parts that are accessible and can be changed from your code after you've installed the voice command definition file are the phrase lists. These however can be accessed comfortably and e.g. extended whenever you need it. For example, let's say you allow the user to launch your app and automatically display some custom data they created before. This is a typical scenario where static phrase lists won't work, as the potential values highly depend on the content users create. You can then use the following method to update the list whenever required, and instantly enable your voice commands to recognize the changed phrase lists.

VoiceCommandSet defaultCommandSet;
if (VoiceCommandService.InstalledCommandSets.TryGetValue("DefaultCommandSet", out defaultCommandSet))
{
    IEnumerable<string> newValues = new[] { "1", "2", "3", "4" };
    await defaultCommandSet.UpdatePhraseListAsync("number", newValues);
}

In the above snippet, I try to access the command set named "DefaultCommandSet" as it has been defined in the definition file before, and then update the "number" phrase list. In the original definition, this list only supported the values 1, 2, and 3, but after the update the voice recognition now also works for the value 4.

Processing Voice Commands

The last missing puzzle piece is how you actually process commands. After all, you want to access in particular the dynamic parts of a command the user has spoken in your app to determine what to do exactly. If you are a bit familiar with Windows Phone you probably are already thinking "navigation arguments", which is spot on. As in many other cases, these arguments are passed to the target page in its query string dictionary.

The following keys for this are well known:

  • voiceCommandName: contains the name of the command that was recognized
  • reco: contains the recognized part, e.g. the phrase defined in the corresponding "ListenFor" element
  • [phrase list name]: contains the value of the recognized phrase list entry

Let's look at a snippet for the gorilla example:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    var arguments = NavigationContext.QueryString;
 
    if (arguments.ContainsKey("voiceCommandName"))
    {
        var voiceCommand = arguments["voiceCommandName"];
        switch (voiceCommand)
        {
            case "PokeGorilla":
                var numberOfGorillas = 1;
                if (arguments.ContainsKey("number"))
                {
                    var number = arguments["number"];
                    int.TryParse(number, out numberOfGorillas);
                }
 
                // do something with the command data
 
                break;
        }
    }
}

First I check for available command data. In a second step, I check whether the phrase list value "number" is available. If it's not, then the user has spoken the generic command for a single gorilla poke. Conversion of the "number" argument to a real integer should never fail, as the voice recognition system only passes on values defined by me. For example, even if you desperately try to say "10" or other invalid values for the "number" phrase list, the first value (1) will be returned here.

Conclusion

Even if there probably are quite some users who don't use voice commands on a daily basis or never will even discover that feature on their phones, the effort it takes for a developer to add support for it is minmal. So if it makes sense for your app and you can think of some great shortcuts, I'm sure the power users aware of voice commands will love to see your ideas.


Subscribe

Comments

  • ChadFonger

    Re: Windows Phone 8: Voice Commands


    posted by ChadFonger on Dec 04, 2014 01:18

    If you have been to the latest basketball game using your local public transit, then it might be time to change the way you think about requesting a ride in your area.  The best way to go about doing this is to look up an helpful resource like: http://top-web.us/are-you-ready-for-first-lyft-experience/

  • ChadFonger

    Re: Windows Phone 8: Voice Commands


    posted by ChadFonger on Dec 04, 2014 04:23
  • JessicaBarden

    Re: Windows Phone 8: Voice Commands


    posted by JessicaBarden on Apr 15, 2015 15:15
    It is a little typical task for developers who takes the initial start as I had gone mad while developing it. I paid a professional to do my essay | www.writingbunch.co.uk for the simple guide for it.
  • BeeOShop

    Re: Windows Phone 8: Voice Commands


    posted by BeeOShop on Apr 29, 2015 14:53

    Mau info toko tas online di Bandung yang menjual berbagai macam tas untuk keperluan wanita dan anak-anak seperti tas-tas wanita yang branded dari berbagai merek terkenal seperti Louis Vuitton, PradaBrussels, Furla, Chanel, Hermes, dan banyak lagi tas branded wanita lainnya dengan bermacam model seperti dompetslingbaghandbag dan tote bag, yang trendy dengan harga yang terjangkau? Silahkan cek di Bee Bagshop grosir tas online di Bandung yang menjual tas-tas dengan moel dan warna yang bervariasi dengan harga yang murah. Selain tas wanita, kami juga menjual tas sekolah anak model selempang dan ransel yang juga branded tiruan seperti jansport dan kipling dengan banyak variasi model dan warna, dijamin putra-putri anda menyukainya.

    Bagi yang ingin merawat kulit wajah tanpa harus repot dan mahal, simak tips kecantikan berikut yang mudah dan murah. Coba Sabun Amoorea. Manfaat sabun ajaib amoorea ini diantaranya untuk berbagai permasalahan kulit anda, seperti jerawat, scars (bekas jerawat), mengencangkan kulit, membuat kulit tampak lebih cerah dan segar, mengatasi lingkar hitam di bawah mata (mata panda), dll. Untuk melihat review sabun amoorea ini klik di sini. Simak juga testimoni yang sudah menggunakan sabun ini, simak selengkapnya. Meski harga sabun amoorea ini cukup terjangkau, produk ini aman, karena terbuat dari 100% bahan alami dan sudah ada ijin dari BPOM sehingga anda tidak perlu khawatir dan ragu memakainya. Jika aman (tidak berbahaya) apakah memakai sabun amoorea ada efek sampingnya? Reaksi apa yang timbul saat pertama menggunakannya? Simak info lengkapnya di sini.

    How To Get Rid Of Acne and Scars site generally tell about  tips for beauty and health skin, and especially tell anything about acne, myths, acne and scars treatments , not only on your face (including acne and scars on your body such as chest and back)which may help you to war against acne and the scars to leaves on your face and body (back and chest), through naturally, home remedies, and medical treatment. Some people believe that natural treatment is most safe. But its seems would take time longer then medical treatment. In my oppinion, using medical treatment is more effective and you'll see the result faster. To find what the best treatment for your acne, better you understand what causes of acne. The following are some factors which can cause acne: Hormones, diet, stress, medication, clothing, environment factors, genes, and cosmetics. For back or chest acne cases, it may caused by your tight clothes. To get rid of acne on back or chest, it's good to wear synthetic loose clothing, such as cotton linen, to prevent excessive rubbing and irritation on the skin. Another treatment that can help you to get rid of back or chest acne is keep your body always clean, with take a bath regularly, preferably with an anti-bacterial soap or a salicylic acid-based cleanser is highly recommended. When acne goes, it will leaves behind the red on skin, and seems impossible to heal it fast overnight. So, it would be better to do something which may offer some remarkable effects on the redness from acne. If you choose naturally treatment,  just take a cube of ice, garlic, or lemon juice mixed with rose water, choose one of them, then apply to your reddish part of your face for a while. Do this continously and measured, then see the result. Below this, some good habits which may help you to get rid of acne scars naturally and fast are: first, drinking lots of water to makes your skin well hydrated, and finally make you skin regenerate faster.  Second, eat the food that containing much the essential vitamins and mineral to help repairing scars skin from the inside. Third, naturally treatment to get rid of acne scar, by applying aloe vera on scars, may help to avoid more scarring, soothe inflamation, and make your skin keep smooth. Fourth, treat your acne scars with natural ingredient, tomato. Its containing much vitamin A, which very efficient in repairing scars skin.  If you want to get rid of acne scars ons faster than naturally or home remedies treatments, using the latest product of technology, such as laser treatment and chemical peeling, or even you can choose microdermabration that guaranteed more effective than other treatments.

    Ada banyak bermacam permasalahan kulit di wajah, salah satu yang paling menggangu adalah jerawat, apalagi jika yang muncul adalah jerawat batu yang ukurannya besar dan menyebabkan rasa sakit. Solusi mengenai berbagai cara menghilangkan jerawat batu ini banyak sekali ditemukan, mulai dari pengobatan alami, maupun secara medis. Untuk kasus jerawat batu ini, sebaiknya anda bisa mengambil tindakan pengobatan yang tepat, untuk kasus jerawat batu disarankan langsung saja ambil perawatan medis, karena beresiko tinggi meninggalkan bekas berupa bopeng di wajah, jika salah menangani. Dengan langsung mengambil tindakan medis, setidaknya akan meminimalisasi resiko timbulnya scars bopeng di wajah yang mana scars jenis ini relatif sulit dihilangkan. Tidak seperti scars berupa noda/ flek hitam. meski tidak mudah juga, namun berkali-kali lipat jauh lebih mudah dan murah dibandingkan dengan mengatasi bopeng bekas jerawat. Perawatan alami yang dapat anda tempuh untuk mengobati jerawat ataupun scars yang berupa noda hitam/ flek bekas jerawat, anda dapat mencoba dengan menggunakan bahan alami misalnya jeruk nipis atau madu yang sudah sangat terkenal khasiatnya yang untuk kesehatan dan kecantikan kulit. Dengan perawatan alami, cenderung lebih aman, hanya saja untuk perawatan ini biasanya dibutuhkan waktu yang lebih lama serta ketelatenan untuk mengatasinya. FYI, Jeruk nipis ini yang tidak hanya dapat memudarkan flek hitam di wajah, tetapi juga dapat memutihkan dan mencerahkan kulit anda. Namun jika anda tidak memiliki cukup kesabaran, sebaiknya langsung saja konsultasi dengan dokter. Untuk menentukan metode pengobatan jerawat dan scars ini biasanya dokter akan melihat tingkat keparahan dari jerawat/ scars anda, bisa dengan pemberian obat minum seperti anti biotik, obat oles (salep), peeling, mikrodermabrasi, laser atau metode pengobatan lainnya. Namun sebelum anda memutuskan menggunakan salah satu treatment tersebut sebaiknya telah jelas terlebih dahulu mengenai efek samping yang ditimbulkan.

    Seiring dengan semakin tingginya pengguna internet dari waktu ke waktu, hal ini menciptakan peluang bisnis tersendiri. Diataranya peluang bejualan tas murah secara online, buatan konveksi-konveksi lokal. Di Bandung cukup banyak konveksi tas yang membuat beraneka macam tas dan dompet tiruan atau kw. Model-model dari tas wanita ini kebanyakan menjiplak tas dan dompet wanita dari brand terkenal luar negeri seperti merek-merek LV atau Louis Vuitton, Hermes, Chanel, Furla, dll yang sangat terkenal. Tas tiruan seperti ini familiar disebut tas replika/ kw, dengan beraneka tingkatanya: Kw I, Kw II, dll. Tas-tas wanita branded ini di Bee Bagshop dijual dengan harga yang bevariasi antara 66-300 ribuan. Pembelinya berasal dari kalangan anak SMA, anak kuliah, pekerja kantoran, serta ibu-ibu muda. Untuk tas sekolah dan kuliah anak, kebanyakan modelnya meniru model tas branded seperti kipling, dan jansport, dengan model tas punggung/ ransel ataupun model selempang. Untuk harga tas-tas branded kw dijual dengan harga yang jauh di bawah harga aslinya, sehingga bisa dipastikan kualitasnya pun berbeda dengan yang original. Di Bee Bagshop sendiri kisaran harga untuk tas jansport tiruan ini dijual dengan harga 60-80 ribuan, sementara harga barang original mungkin sekitar 800-900 ribuan, bahkan mungkin ada juga yang lebih mahal. Untuk tas ransel branded tiruan ini kebanyakan pembelinya berasal dari anak sekolah dan kuliah.

    Jika anda wanita yang terlalu sibuk bekerja, dan selalu bingung bahkan tidak sempat untuk sekedar memikirkan menu masakan sehari-hari untuk keluarga anda, silahkan kunjungi situs Aneka Resep dan Cara membuat Masakan Praktis Khas Indonesia, situs ini berisi kumpulan resep masakan yang menggunakan bahan-bahan umum seperti ayam, daging sapi, serta beraneka seafood (udang, cumi, ikan), dan juga bahan-bahan makanan yang tidak asing bagi  masyarakat Indonesia seperti tahu, tempe, serta nasi, . Selain itu ada juga resep cemilan khas nusantara, yang dapat anda jadikan inspirasi untuk menu masakan dan makanan ringan keluarga anda di rumah. Seperti resep membuat masakan khas suatu daerah seperti soto ayam lamongan, ataupun masakan khas lebaran seperti opor ayam, beraneka masakan berbahan dasar ayam ataupun bahan makanan lainnya, yang pastinya praktis dan mudah dibuat.

  • johnrichard

    Re: Windows Phone 8: Voice Commands


    posted by johnrichard on May 05, 2015 18:26
    It has fully emerged to crown Singapore's southern shores and undoubtedly placed her on the global map of residential landmarks. I still scored the more points than I ever have in a season for GS. I think you would be hard pressed to find somebody with the same consistency I have had over the years so I am happy with that.internet marketing
  • Scal1981

    Re: Windows Phone 8: Voice Commands


    posted by Scal1981 on May 10, 2015 18:43
    I’ll bookmark your weblog and check again here regularly. I’m quite sure I’ll learn many new stuff right here! [url=https://www.linkedin.com/groups/Guilt-Free-Desserts-Review-Is-8258229.S.5974228829663752196]does Guilt Free Desserts work[/url] [url=https://www.linkedin.com/groups/Real-Writing-Jobs-Review-Is-8262451.S.5976637736789041154]Real Writing Jobs Review[/url] [url=https://www.linkedin.com/groups/Google-Sniper-2-Review-Is-8258229.S.5974198355520221186]Google Sniper Reviews[/url] [url=https://www.linkedin.com/groups/Manifestation-Miracle-Review-Is-it-8258598.S.5975983056723464195]Manifestation Miracle[/url] [url=https://www.linkedin.com/groups/Detox-My-Mac-Review-Is-6942612.S.5973878808590172162]Detox My Mac Reviews[/url] [url=https://www.linkedin.com/groups/Get-Paid-Draw-Review-Is-8258229.S.5974198118391046144]does Get Paid to Draw work[/url] [url=https://www.linkedin.com/groups/Paid-Surveys-Home-Review-Is-8258598.S.5975991457796943872]Paid Surveys at Home[/url] [url=https://www.linkedin.com/groups/Click-4-Surveys-Review-Is-8252834.S.5972298519770382337]Click 4 Surveys Review[/url] [url=https://www.linkedin.com/groups/Total-Hair-Regrowth-Review-Is-6946680.S.5978522494095613955]does Total Hair Regrowth work[/url] [url=https://www.linkedin.com/groups/Cruise-Control-Diet-Review-Is-8252834.S.5972299596355944449]Cruise Control Diet Review[/url] [url=https://www.linkedin.com/groups/Zygor-Guides-Review-Is-it-6946680.S.5978564187272531968]Zygor Guides Reviews[/url] [url=https://www.linkedin.com/groups/Psoriasis-Free-Life-Review-Is-8262451.S.5976636679694413824]Psoriasis Free for Life[/url] [url=https://www.linkedin.com/groups/Meet-Your-Sweet-Review-Is-8258598.S.5975983140894756868]Meet Your Sweet[/url] [url=https://www.linkedin.com/groups/Visual-Impact-Muscle-Building-Review-6946680.S.5978542810670850052]Visual Impact Muscle Building[/url] [url=https://www.linkedin.com/groups/Start-Potty-Training-Review-Is-8263627.S.5977840549388972033]Start Potty Training Review[/url] [url=https://www.linkedin.com/groups/Affilorama-Review-Is-it-Scam-8252834.S.5972279883718549507]Affilorama[/url] [url=https://www.linkedin.com/groups/Quantum-Vision-System-Review-Is-8262451.S.5976632967236243460]Quantum Vision System Review[/url] [url=https://www.linkedin.com/groups/Everyday-Roots-Review-Is-it-6942612.S.5973889085008265216]Everyday Roots Reviews[/url] [url=https://www.linkedin.com/groups/Pure-Reiki-Healing-Mastery-Review-8262451.S.5976636262281461763]Pure Reiki Healing Mastery Review[/url] [url=https://www.linkedin.com/groups/Total-Hair-Regrowth-Review-Is-6946680.S.5978522494095613955]Total Hair Regrowth Reviews[/url] [url=https://www.linkedin.com/groups/Jump-Manual-Review-Is-it-8258229.S.5974231058101661699]Jump Manual[/url] [url=https://www.linkedin.com/groups/Paid-Social-Media-Jobs-Review-8258598.S.5975990421803847682]Paid Social Media Jobs Review[/url] [url=https://www.linkedin.com/groups/Sistema-Ganar-La-Loteria-Revision-8262451.S.5976642551950700545]Sistema Ganar la Loteria Revisions[/url] [url=https://www.linkedin.com/groups/Start-Potty-Training-Review-Is-8263627.S.5977840549388972033]does Start Potty Training work[/url] [url=https://www.linkedin.com/groups/Obsession-Phrases-Review-Is-it-8258598.S.5975990564477288450]Obsession Phrases[/url] [url=https://www.linkedin.com/groups/Magic-Making-Up-Review-Is-8263627.S.5978078288457854976]The Magic of Making Up[/url] [url=https://www.linkedin.com/groups/MI40X-Review-Is-it-Scam-8258598.S.5975984449932840960]MI40X Review[/url] [url=https://www.linkedin.com/groups/Get-Paid-Taking-Pictures-Review-8258229.S.5974197128740814850]does Get Paid Taking Pictures work[/url] [url=https://www.linkedin.com/groups/Natural-Clear-Vision-Review-Is-8258598.S.5975984533974114307]does Natural Clear Vision work[/url] [url=https://www.linkedin.com/groups/Survival-MD-Review-Is-it-8263627.S.5977841660845977600]Survival MD Review[/url]
  • wardoyoming

    Re: Windows Phone 8: Voice Commands


    posted by wardoyoming on May 17, 2015 11:32
    elopment, and marketing of technologies for the productionidery Digitizer Advice Harga besi beton iron steel center estExpert Author Jim McCormackStep vans have become more popular in recentarsEzi Grosir besi plat kapal 80 mm indonesia raya n to use During the late 1800s, stainless steel was considered an expeas receive supplier besi beton ulir 36 mm borongan ksty article on StumbleUponShare this article on DeliciousShare this article ong plac harga besi beton banjarbaru jual besi bajateel and titanium for optimal strength These machines are often needed to lnWe w produsen baja plat kapal 50 mm coil lampung le molding and 316 stainless steel marine hardware* Deck Formed with 316 stand C harga besi beton ulir 29 mm 12 m per kg
  • wardoyoming

    Re: Windows Phone 8: Voice Commands


    posted by wardoyoming on May 17, 2015 11:33
    09 timesWord count: 1,069Article ToolsEzinePublisher Report this article Ci kursus bekasi terbaik
  • doktercinta

    Re: Windows Phone 8: Voice Commands


    posted by doktercinta on May 25, 2015 17:28
    article on your website is very nice. I read it almost every day. by. obat pembesar penis

Add Comment

Login to comment:
  *      *       

From this series