Page 3 of 5 FirstFirst 12345 LastLast
Results 21 to 30 of 46

Thread: I'm thinking about making an official italian soundpack

  1. #21
    Crew Chief Mega Corp CEO mr_belowski's Avatar
    Join Date
    Feb 2017
    Posts
    1,815
    ayup

    Morten added some awesome stuff to today's release that should help you to verify your recordings - see here:

    https://github.com/mrbelowski/CrewCh...Sound_Test.txt

  2. #22
    Crew Chief Mega Corp CEO mr_belowski's Avatar
    Join Date
    Feb 2017
    Posts
    1,815
    i did a little work on the Italian number reader to bring it inline with the English one. To do this, I had to invent some rules and options. These are...


    All the number folders are now supported. The Italian number reader can now use numbers of the following forms:

    point0 - point9 (for adding tenths to a number of seconds e.g. "one forty two *point three*")
    point0seconds - point9seconds (as above with "seconds" at the end, optional, app occasionally uses this variant)

    0point1 - 59point9 (seconds and tenths, generally read with no other numbers, e.g. "twelve point seven")
    0point1seconds - 9point9seconds (as above with "seconds" at the end, optional, app occasionally uses this variant)

    point00 - point99 (for adding hundredths to a number of seconds e.g. "one forty two *point three five*")

    1_01 - 2_59 (minutes and seconds, we often add one of the 'point x' or 'point xy' sounds to these)


    So you can use the same number folders as the English version. I appreciate that some might not make sense in Italian - you'll need to flag these so I can understand how you might need the behaviour to change.

    There's an additional 'inflection' option too. Each of these sound sets can have another version where the folder name ends with _more - e.g.

    4point5_more

    This applies to pretty much all the number sounds - you can create 2 versions of every sound, one with a normal inflection and one with a rising inflection (as you'd use when there is another word immediately after this sound). These are optional in all cases. There's some logic in the app - if the app thinks there's another sound to come immediately after a number sound (any of these folders), it'll look for a version of that sound folder with '_more' at the end, and use this instead. If this doesn't exist it'll just use the regular folder.

    Hopefully the existing logic is mostly OK and you can just add the _more versions that you think you'll need and it'll work OK but I'm expecting to have to do more work here in response to your feedback.

    I also appreciate that "one second" / "one minute", etc don't translate directly - we might be OK here, or we might need more folders for "a second" etc.



    [edit]

    Here's a version of the app that contains these changes

    http://crewchief.isnais.de/CrewChiefV4.9.4.4.msi

    I've tried to ensure the changes to break Gianfranco's sound pack, but I'm not able to test this

  3. #23
    alright, so:


    1) numbers_it will be switched to numbers
    2) we will keep the 1_23 system, that takes longer to record but it's more naturally sounding

    so the time-construction phrase should be:

    1_23 + point_4

    OR
    1_23 + and_4

    but since point_4 and and_4 are kind of the same thing (the first is more formal, the second is quicker) I'd say it's useless to keep tons of folders since these are easily interchanged. let's keep a point_4 folder and I'll just put inside both point_4 recordings and and_4 recordings... there shouldn't be any downside to this, am I right?
    anyway right now CC won't load the 1_23 folder correctly and will keep looking for a number_seconds_23 folder, and I don't know why

    3) the _more suffix is applied to the folders now, shouldn't we apply it to the files instead? 1_more.wav instead of 1_23_more
    now that I think of it though, it will be a massive work doubling all the 1_23 files to add the _more... do these files ever get used alone? like, is there ever an instance when CC just says "one twenty three"? I've checked with the test box and it looks it always adds point_4, and_4, seconds or something else at the end. it would be a huge waste of time and space to have to record all the 1_23 files with no inflection just to never use them ever

    4) the clock readings right now are "twelve thirtyfour", while in italian it makes more sense to say "twelve AND thirtyfour". also when we say it's one o'clock we don't say "uno", we say "una" (don't fucking ask me why hahaha), so we'll also need an exception there.
    more, you say "it's three oh oh" IIRC, while in italian you should just say "it's three". this actually caused the clock in gianfranco's translation to break because he didn't have an oh folder IIRC and the clock was looking for one, so when the clock wanted to construct "three oh four" it would break and stop playing. anyway we say "three and four" so there's no need to add the oh.
    last thing, if we also want to make the clock even more natural sounding, we could also add midnight and midday, it's more natural to say it's midnight and 34, or it's midday and 34.
    to make it super natural sounding, we would also need an introductory phrase, which in english would sound similar to "it's"... in italian it would be "sono le 15:40", with the only exception thrown when it's midday or midnight which can be "sono le 12" or "sono le 24" or "è mezzanotte" or "è mezzogiorno". clock is also mostly read in 24 hours, almost never in AM/PM but it's not like it's an error.

  4. #24
    Crew Chief Mega Corp CEO mr_belowski's Avatar
    Join Date
    Feb 2017
    Posts
    1,815
    I need to take time to answer these questions and I can't do it now. I'll set aside an couple of hours over the weekend to go through this with a clear head. It would make things easier for me if you could send me part or all of your Italian pack so I can reproduce what you're seeing here

  5. #25
    absolutely! let me pack it up, I'll dropbox you that.

    it would make sense that you take your time and set a viable method for translation packs, since I see in another thread there's someone who'd like to try to do german... since you're kind of setting a path here with IT (since it's kind of the first if I'm not wrong) the choices you make now will matter for the future

  6. #26
    alright I've tackled the updated speech recognition config text file tonight. everything's fine except that the syntax for the dynamic recognition should be changed.
    since you've been so nice to prepare a table of what can be asked, I've also been nice and corrected that table in what it should be to work correctly in italian

    here it is (and a couple of notes before that):

    POSITION 10 won't work. it needs an ordinal number to work naturally. so it should be like TENTH POSITION = DECIMA POSIZIONE
    (ordinal numbers can be added as alternatives to cardinal numbers, but I don't know if that causes issues with the recognition of other things like fuel. anyway it's easily doable but the position in the phrase must be switched anyway, i.e. not position TENTH but TENTH position)
    short position (P 10) instead can work like it is now.


    # WHERE_IS + (driver_name) [reads his position and the gap to the player]
    # WHATS + LAST_LAP + POSSESSIVE + (driver_name) [driver's last lap time]
    # WHATS + BEST_LAP + POSSESSIVE + (driver_name) [driver's best lap time]
    # WHATS + IRATING + POSSESSIVE + (driver_name) [driver's irating - iracing only]
    # WHATS + LICENSE_CLASS + POSSESSIVE + (driver_name) [driver's license class - iracing only]
    # WHATS + LAST_LAP + POSSESSIVE (female composite di(of) + la(the) = della) + (cardinal number) POSITION_LONG [driver in position (number)'s last lap time]
    # WHATS + BEST_LAP + POSSESSIVE (female composite) + (cardinal number) POSITION_LONG [driver in position (number)'s best lap time]
    # WHATS + IRATING + POSSESSIVE (female composite) + (cardinal number) POSITION_LONG [driver in position (number)'s irating - iracing only]
    # WHATS + LICENSE_CLASS + POSSESSIVE (female composite) + (cardinal number) POSITION_LONG [driver in position (number)'s license class - iracing only]
    # WHATS + LAST_LAP + POSSESSIVE + POSITION_SHORT (number) [driver in P (number)'s last lap time]
    # WHATS + BEST_LAP + POSSESSIVE + POSITION_SHORT (number) [driver in P (number)'s best lap time]
    # WHATS + IRATING + POSSESSIVE + POSITION_SHORT (number) [driver in P (number)'s irating - iracing only]
    # WHATS + LICENSE_CLASS + POSSESSIVE + POSITION_SHORT (number) [driver in P (number)'s license class - iracing only]
    # WHATS + LAST_LAP + POSSESSIVE (composite di(of) + il(the) = del) + THE_LEADER [leader's last lap time]
    # WHATS + BEST_LAP + POSSESSIVE (composite) + THE_LEADER [leader's best lap time]
    # WHATS + IRATING + POSSESSIVE (composite) + THE_LEADER [leader's irating - iracing only]
    # WHATS + LICENSE_CLASS + POSSESSIVE (composite) + THE_LEADER [leader's license class - iracing only]
    # WHATS + LAST_LAP + POSSESSIVE + THE_GUY_IN_FRONT [car in front's last lap time]
    # WHATS + BEST_LAP + POSSESSIVE + THE_GUY_IN_FRONT [car in front's best lap time]
    # WHATS + IRATING + POSSESSIVE + THE_GUY_IN_FRONT [car in front's irating - iracing only]
    # WHATS + LICENSE_CLASS + POSSESSIVE + THE_GUY_IN_FRONT [car in front's license class - iracing only]
    # WHATS + LAST_LAP + POSSESSIVE (female composite del + la = della) + THE_CAR_IN_FRONT [car in front's last lap time]
    # WHATS + BEST_LAP + POSSESSIVE (female composite) + THE_CAR_IN_FRONT [car in front's best lap time]
    # WHATS + IRATING + POSSESSIVE (female composite) + THE_CAR_IN_FRONT [car in front's irating - iracing only]
    # WHATS + LICENSE_CLASS + POSSESSIVE (female composite) + THE_CAR_IN_FRONT [car in front's license class - iracing only]
    # WHATS + LAST_LAP + POSSESSIVE + THE_GUY_AHEAD [car in front's last lap time]
    # WHATS + BEST_LAP + POSSESSIVE + THE_GUY_AHEAD [car in front's best lap time]
    # WHATS + IRATING + POSSESSIVE + THE_GUY_AHEAD [car in front's irating - iracing only]
    # WHATS + LICENSE_CLASS + POSSESSIVE + THE_GUY_AHEAD [car in front's license class - iracing only]
    # WHATS + LAST_LAP + POSSESSIVE (female composite) + THE_CAR_BEHIND [car behind's last lap time]
    # WHATS + BEST_LAP + POSSESSIVE (female composite) + THE_CAR_BEHIND [car behind's best lap time]
    # WHATS + IRATING + POSSESSIVE (female composite) + THE_CAR_BEHIND [car behind's irating - iracing only]
    # WHATS + LICENSE_CLASS + POSSESSIVE (female composite) + THE_CAR_BEHIND [car behind's license class - iracing only]
    # WHATS + LAST_LAP + POSSESSIVE + THE_GUY_BEHIND [car behind's last lap time]
    # WHATS + BEST_LAP + POSSESSIVE + THE_GUY_BEHIND [car behind's best lap time]
    # WHATS + IRATING + POSSESSIVE + THE_GUY_BEHIND [car behind's irating - iracing only]
    # WHATS + LICENSE_CLASS + POSSESSIVE + THE_GUY_BEHIND [car behind's license class - iracing only]
    # WHAT_TYRE_IS + (driver_name) [the tyre type being used by (driver_name) - raceroom only]
    # WHAT_TYRES_IS + (driver_name) [the tyre type being used by (driver_name) - raceroom only]
    # WHAT_TYRE_IS + THE_GUY_IN_FRONT [the tyre type being used by the car ahead - raceroom only]
    # WHAT_TYRES_IS + THE_GUY_IN_FRONT [the tyre type being used by the car ahead - raceroom only]
    # WHAT_TYRE_IS + THE_GUY_AHEAD [the tyre type being used by the car ahead - raceroom only]
    # WHAT_TYRES_IS + THE_GUY_AHEAD [the tyre type being used by the car ahead - raceroom only]
    # WHAT_TYRE_IS + THE_GUY_BEHIND [the tyre type being used by the car behind - raceroom only]
    # WHAT_TYRES_IS + THE_GUY_BEHIND [the tyre type being used by the car behind - raceroom only]
    # WHAT_TYRE_IS + POSITION_SHORT (number) [the tyre type being used by the car in P (number) - raceroom only]
    # WHAT_TYRES_IS + POSITION_SHORT (number) [the tyre type being used by the car in P (number) - raceroom only]
    # WHAT_TYRE_IS + THE (female) + (cardinal number) POSITION_LONG [the tyre type being used by the car in position (number) - raceroom only]
    # WHAT_TYRES_IS + THE (female) + (cardinal number) POSITION_LONG [the tyre type being used by the car in position (number) - raceroom only]
    # WHOS_IN + (cardinal number) POSITION_LONG [the name of the driver in position (number)]
    # WHOS_IN + POSITION_SHORT (number) [the name of the driver in P (number)]
    # WHERE_IS + POSITION_SHORT (number) [the position and gap to the driver in position (number)]
    # WHERE_IS + THE (female) + (cardinal number) POSITION_LONG [the position and gap to the driver in P (number)]




    alright, on an unrelated issue, iRacing's F1 setups (and VRS, and all the rest for what it's worth) considers the McLaren MP4-30 fuel in KILOS. this is of course to reflect the limitations in real life rules where 100 kilos is the maximum fuel allowed.
    right now CC is kind of confusing because it will announce the consumption in LITERS, while all the rest will be in KILOS. so optimally there should be an exception for it to express fuel consumption in kg rather than L.


    now, I've been testing some advanced speech recog and I've come across a couple of errors. here's the log (and the command translation ofc)


    03:26:42.525 : Recognised : qual è la mia patente confidence = 0.989 (what's my license class)
    03:26:42.528 : Message COMPOUND_License/license can't be played because there is no sound for text fragment numbers/point

    it seems it's looking for the /point folder under /numbers, but it should be under numbers_it. but since we're going to revert back to numbers maybe it doesn't matter.



    03:37:39.279 : Recognised : dov'è schmidt confidence = 0.791 (where is schmidt - a random driver in the lobby I was in)
    03:37:39.284 : Message COMPOUND_opponentPosition can't be played because there is no sound for text fragment position/p1000

    when I asked CC this guy didn't set a lap yet. so maybe this is an interesting exception.



    03:37:29.891 : Recognised : qual è musso patente confidence = 0.981 (what's Musso license class - Musso was another random driver in my lobby)
    03:37:29.893 : Unable to respond - error message: Index and length must refer to a location within the string.
    Parameter name: length

    I don't know what to do with this. I have no idea what this error is about




    04:03:22.644 : Recognised : che ore sono confidence = 0.780 (what time is it)
    04:03:22.653 : Message COMPOUND_current_time can't be played because there is no sound for text fragment numbers/oh

    here again we can see CC is looking for oh inside numbers instead of numbers_it but this was an issue also with the original gianfranco's pack. the clock request would stop working because CC would require the sound for "oh", while in IT it's not really necessary

  7. #27
    Crew Chief Mega Corp CEO mr_belowski's Avatar
    Join Date
    Feb 2017
    Posts
    1,815
    ok, i'll digest that - will need some code changes in the speech recogniser code that assembles the grammar

    Regarding fuel, iRacing's internal API always uses litres, so we have to convert inside the app when making requests or processing data. A conversion to / from gallons already exists, kilos / pounds is probably do-able.

    p1000 is a default value in some cases for iRacing. It means no data - there's probably a missing sanity check somewhere in the code

    the index / length one is another missing sanity check - i expect the API hasn't given any data about this fella's licence class and we're not checking the response properly

    the clock request came after Gianfranco's sound pack was added so is English-only. It needs a separate Italian version



    Regarding the 'more' suffix, i've written the basic rules in code such that if there's additional sounds to be added to a given number sound then the app will use the _more version if it's available. This rule might be OK but needs testing. The _more suffix will always apply to folder names, not sound file names. The app doesn't care about the file names and it'll pick a random file from a given folder. There are only 2 exceptions to this rule - driver name sound files (file name == driver name), and behaviour modifiers (special file names used to mark individual sounds as sweary or having a personalisation). Where you see file names like '/position/p42/42.wav' this filename could be changed to anything and the app wouldn't care - the app only uses the folder name to determine which sounds to play and it picks any of the .wav files in that folder. It's ended up being called 42.wav simply because of the way my workflow has processed a large batch of sounds.

  8. #28
    Crew Chief Mega Corp CEO mr_belowski's Avatar
    Join Date
    Feb 2017
    Posts
    1,815
    Here's what the Italian number reader will do after I package the next beta app version. How does this look?

    Code:
    0 hours, 0 minutes, seconds > 0 or tenths > 0 or (precision is hundredths and hundredths > 0) - typically used for a time gap to an opponent
    
    
    	[2 or more seconds, no tenths or hundredths]
    	numbers/3, numbers/seconds
    	[1 second]
    	numbers/a_second
    	
    	[1 or more tenth, no hundredths]
    	numbers/1point5
    	OR (randomly chosen alternative sound including 'seconds' at the end, not really needed, i could disble this)
    	numbers/1point5seconds
    	
    	Note that we also have
    	numbers/0point5
    	does this work in Italian?
    	
    	[any number of seconds, 1 to 9 hundredths (e.g 4.01 - 4.09)]
    	numbers/4, numbers/point09
    	
    	[any number of seconds, 10 to 99 hundredths (e.g 0.11 - 0.99)]
    	numbers/0, numbers/point59
    	
    
    
    0 hours, minutes > 0 and minutes < 3, seconds > 0 - typically used for a laptime
    
    
    	if precision is hundredths
    		numbers/2_04, numbers/point02
    		numbers/2_34, numbers/point92
    		numbers/1_12, numbers/point00
    		
    	if precision is tenths
    		numbers/1_42, numbers/point3
    		numbers/1_01, numbers/point0
    	note that in English, "point 2" means 0.2, "point zero 2" means 0.02 - does this work in Italian?
    	
    	if precision is seconds (this one's an edge case - if we're reading a time between 1 and 3 minutes, 
    	I think we generally use a precision of tenths or hundredths but i'm not 100% sure)
    		numbers/a_minute
    		numbers/2, numbers/minutes (use "minutes" at the end if there are no seconds or tenths)
    		numbers/1, numbers_seconds_12	(this looks wrong to me - shouldn't it be '1 minute and 12 seconds'?)
    
    
    		
    times > 3 minutes (this drops back to the 'old' numbers)
    	
    	[1 hour, 4 minutes (note if hours > 1 we don't read seconds)]
    		numbers/an_hour_and, numbers/4, numbers/minutes
    	[2 or more hours, 1 minutes]
    		numbers/4, numbers/hours_and, numbers/a_minute
    	[1 hour]
    		numbers/an_hour
    	[2 hours]
    		numbers/2, numbers/hours
    	[0 hours, 30 minutes, 12 seconds]
    		numbers/30, numbers/minutes, numbers/numbers_seconds_12

  9. #29
    Crew Chief Mega Corp CEO mr_belowski's Avatar
    Join Date
    Feb 2017
    Posts
    1,815
    note this is just a brain-dump of me going through the code reminding myself of what it does and what it'll do. The current beta you have will always look in /numbers_it/, but the next one will be looking in /numbers/

    There's an old comment on that weird "number/numbers_seconds_" folder:

    "this is a separate set of number recordings for numbers which are to be read as seconds, but only where we'll read some tenths afterwards. These have a special inflection specific to numbers read as, e.g. 'one *zero six* and 4" or "3 *twenty* and zero'"

    I don't think this comment is entirely accurate anyway - it'll use this weird folder even if there are no tenths (but that can be fixed of course). This feels like a nasty hack and I'm starting to think we might need to revert the italian number reader so we don't wreck Gianfranco's work, and implement a new one for your work. I would have thought that the rising-inflection stuff would take care of this - instead of using "numbers/numbers_seconds_34" we'd use "numbers/34_more"

    Anyway, i've got to go, be back on later

  10. #30
    oof, I didn't get any email notification that you answered me, and I expected to see you pop up on discord. did you see the excel I prepared you with the time readings breakdown?

    >Regarding fuel, iRacing's internal API always uses litres, so we have to convert inside the app when making requests or processing data. A conversion to / from gallons already exists, kilos / pounds is probably do-able.

    no pounds, just kilos. they're bringing real life rules into iRacing, and the rules say 100kgs per race. so it's never pounds.

    >Regarding the 'more' suffix, i've written the basic rules in code such that if there's additional sounds to be added to a given number sound then the app will use the _more version if it's available.

    I've found out that some new folders (mandatory_pit_stops and fuel maybe?) got some unit of measure in there, and I prepared a _more folder for them also.
    because that will also need inflection based on how you use it. example (! marks the inflection):

    "you have fuel for 20! laps."
    "you need 20 laps! to the end of the race"

    also all the drivers names will need inflections:

    "Belowski! is behind you. his gap is now 20 seconds."
    "the car behind you is Belowski".


    >"this is a separate set of number recordings for numbers which are to be read as seconds, but only where we'll read some tenths afterwards. These have a special inflection specific to numbers read as, e.g. 'one *zero six* and 4" or "3 *twenty* and zero'"

    hmm. I checked with the files, and they just sound to me like normal numbers with a high inflection. like a 15_more number, to be honest. in fact, the folder has no single number's _more version. you got all the normal numbers, all the tenths and tenths_more and then you got the numbers_second folders. I might think we could try and just revert these to common _more folders to be used all around.



    >I don't think this comment is entirely accurate anyway - it'll use this weird folder even if there are no tenths (but that can be fixed of course). This feels like a nasty hack and I'm starting to think we might need to revert the italian number reader so we don't wreck Gianfranco's work, and implement a new one for your work. I would have thought that the rising-inflection stuff would take care of this - instead of using "numbers/numbers_seconds_34" we'd use "numbers/34_more"

    uhm, couldn't you just make it treat the reader differently based on the pack version? Gianfranco's pack is outdated and it was a... 104 maybe? while my pack is above 150 now. so you can keep the old number reader for the old versions and improve the new one for new versions?

Page 3 of 5 FirstFirst 12345 LastLast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •