From 17c67c88f46992dff81c1f8e742d07eb12cd8045 Mon Sep 17 00:00:00 2001 From: BeritJanssen Date: Tue, 24 Oct 2023 13:55:15 +0200 Subject: [PATCH 01/21] add texts and translations --- backend/experiment/fixtures/experiment.json | 224 ------------------ .../experiment/rules/musical_preferences.py | 65 +++-- .../consent/consent_musical_preferences.html | 76 ++++++ .../html/musical_preferences/feedback.html | 2 +- backend/locale/zh/LC_MESSAGES/django.mo | Bin 59624 -> 65588 bytes backend/locale/zh/LC_MESSAGES/django.po | 222 +++++++++++++---- 6 files changed, 308 insertions(+), 281 deletions(-) create mode 100644 backend/experiment/templates/consent/consent_musical_preferences.html diff --git a/backend/experiment/fixtures/experiment.json b/backend/experiment/fixtures/experiment.json index beb0c6fdc..2233354dc 100644 --- a/backend/experiment/fixtures/experiment.json +++ b/backend/experiment/fixtures/experiment.json @@ -346,229 +346,5 @@ 18 ] } -}, -{ - "model": "experiment.feedback", - "pk": 1, - "fields": { - "text": "", - "experiment": 15 - } -}, -{ - "model": "experiment.feedback", - "pk": 2, - "fields": { - "text": "", - "experiment": 15 - } -}, -{ - "model": "experiment.feedback", - "pk": 3, - "fields": { - "text": "", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 4, - "fields": { - "text": "hh started this test at 11:52 and played until 11:58. But filled in the feedback and submitted at 12: 05.", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 5, - "fields": { - "text": "I breakdown music by ear a lot, so I found this very interesting. After the top row I realized I needed to jot down reminders on scratch paper. Figuring out what is the most effective approach to summarizing a snippet is a great problem to solve. Maybe I will craft a longer response in an email.", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 6, - "fields": { - "text": "Not an easy Play. Cannon say That I plagend it well.", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 7, - "fields": { - "text": "", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 8, - "fields": { - "text": "", - "experiment": 14 - } -}, -{ - "model": "experiment.feedback", - "pk": 9, - "fields": { - "text": "Hi folks! This is the second time I played, and it worked just like a memory game where two \"cards\" were identical. The first time I played, it was a little different - one of the cards sounded like it was being played through some kind of filter and the other was normal. Also, when I got to the end one was the \"Westworld\" theme and its match did not really sound like it was a match. Not sure if any of this is intentional but I thought I'd let you know! :)", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 10, - "fields": { - "text": "This was really hard!!", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 11, - "fields": { - "text": "Sometimes when I clicked, no music played. Not sure if my bluetooth connection was hijacked. Every time I could fix it by clicking on another one -- but I guess that decreased my performance a bit.", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 12, - "fields": { - "text": "Boring excerpts. Rules aren't clear.", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 13, - "fields": { - "text": "I notice that when I click play again, then after finishing the game, it adds the points to the previous points. I wonder if this is the intented behaviour. Very cool application tho!", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 14, - "fields": { - "text": "Were last two correct?! ", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 15, - "fields": { - "text": "DJB game post fix 1 ", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 16, - "fields": { - "text": "game 3 o", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 17, - "fields": { - "text": "game 3 or 4 for me ", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 18, - "fields": { - "text": "That's really cool! ", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 19, - "fields": { - "text": "", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 20, - "fields": { - "text": "play across board djb", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 21, - "fields": { - "text": "First four cards I clicked already showed misremembered.", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 22, - "fields": { - "text": "Yes ER theme tune! What nostalgia!! ", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 23, - "fields": { - "text": "None of the songs were from TV shows", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 24, - "fields": { - "text": "This is way too hard", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 25, - "fields": { - "text": "I was too lazy to read the instructions and didn't realize the task at first. But got the hang of it soon enough.", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 26, - "fields": { - "text": "Pairs are much easier to remember when you know the themes (which is not my case for the most part)\nFun to play ! ", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 27, - "fields": { - "text": "Nice work!", - "experiment": 17 - } -}, -{ - "model": "experiment.feedback", - "pk": 28, - "fields": { - "text": "nice", - "experiment": 17 - } } ] diff --git a/backend/experiment/rules/musical_preferences.py b/backend/experiment/rules/musical_preferences.py index cf6ded0f6..fffe73620 100644 --- a/backend/experiment/rules/musical_preferences.py +++ b/backend/experiment/rules/musical_preferences.py @@ -23,6 +23,7 @@ class MusicalPreferences(Base): ID = 'MUSICAL_PREFERENCES' + consent_file = 'consent_musical_preferences.html' preference_offset = 4 #20 knowledge_offset = 6 #42 round_increment = 1 @@ -44,7 +45,11 @@ def __init__(self): ] def first_round(self, experiment): - consent = Consent() + rendered = render_to_string('consent/{}'.format(self.consent_file) + ) + consent = Consent( + text=rendered, title=_('Informed consent'), confirm=_('I agree'), deny=_('Stop') + ) playlist = Playlist(experiment.playlists.all()) start_session = StartSession() return [ @@ -128,8 +133,8 @@ def next_round(self, session, request_session=None): like_results = session.result_set.filter(question_key='like_song') feedback = Trial( html=HTML(body=render_to_string('html/musical_preferences/feedback.html', { - 'unlocked': _("Love "), - 'n_songs': n_songs, + 'unlocked': _("Love unlocked"), + 'n_songs': n_songs - 1, 'top_participant': self.get_preferred_songs(like_results, 3) })) ) @@ -139,8 +144,8 @@ def next_round(self, session, request_session=None): known_songs = session.result_set.filter(question_key='know_song', score=2).count() feedback = Trial( html=HTML(body=render_to_string('html/musical_preferences/feedback.html', { - 'unlocked': _("Knowledge "), - 'n_songs': n_songs, + 'unlocked': _("Knowledge unlocked"), + 'n_songs': n_songs - 1, 'top_participant': self.get_preferred_songs(like_results, 3), 'n_known_songs': known_songs })) @@ -150,20 +155,28 @@ def next_round(self, session, request_session=None): like_results = session.result_set.filter(question_key='like_song') known_songs = session.result_set.filter(question_key='know_song', score=2).count() all_results = Result.objects.filter( - comment='like_song' + question_key='like_song' ) + top_participant = self.get_preferred_songs(like_results, 3) + top_all = self.get_preferred_songs(all_results, 3) feedback = Trial( html=HTML(body=render_to_string('html/musical_preferences/feedback.html', { - 'unlocked': _("Connection "), - 'n_songs': n_songs, - 'top_participant': self.get_preferred_songs(like_results, 3), + 'unlocked': _("Connection unlocked"), + 'n_songs': n_songs - 1, + 'top_participant': top_participant, 'n_known_songs': known_songs, - 'top_all': self.get_preferred_songs(all_results, 3) + 'top_all': top_all })) ) session.finish() session.save() - return [feedback, self.get_final_view(session)] + return [feedback, self.get_final_view( + session, + top_participant, + known_songs, + n_songs, + top_all + )] section = session.playlist.random_section() like_key = 'like_song' @@ -190,7 +203,7 @@ def next_round(self, session, request_session=None): view = Trial( playback=playback, feedback_form=form, - title=_('Song %(round)i out of %(total)i' %{ + title=_('Song %(round)i/%(total)i' %{ 'round': n_songs, 'total': session.experiment.rounds}), config={ 'response_time': section.duration + .1, @@ -205,9 +218,33 @@ def calculate_score(self, result, data): else: return super().calculate_score(result, data) - def get_final_view(self, session): + def social_media_info(self, experiment, top_participant, known_songs, n_songs, top_all): + current_url = "{}/{}".format(settings.RELOAD_PARTICIPANT_TARGET, + experiment.slug + ) + format_songs = lambda songs: ', '.join([song['name'] for song in songs]) + return { + 'apps': ['facebook', 'twitter'], + 'message': _("I explored musical preferences on %(url)s! My top 3 favorite songs: %(top_participant)s. I know %(known_songs)i out of %(n_songs)i songs. All players' top 3 songs: %(top_all)s") % { + 'url': current_url, + 'top_participant': format_songs(top_participant), + 'known_songs': known_songs, + 'n_songs': n_songs, + 'top_all': format_songs(top_all) + }, + 'url': experiment.url or current_url, + 'hashtags': [experiment.hashtag or experiment.slug, "amsterdammusiclab", "citizenscience"] + } + + def get_final_view(self, session, top_participant, known_songs, n_songs, top_all): # finalize experiment - social_info = self.social_media_info(session.experiment, session.final_score) + social_info = self.social_media_info( + session.experiment, + top_participant, + known_songs, + n_songs, + top_all + ) social_info['apps'] = ['weibo', 'share'] view = Final( session, diff --git a/backend/experiment/templates/consent/consent_musical_preferences.html b/backend/experiment/templates/consent/consent_musical_preferences.html new file mode 100644 index 000000000..8291d1385 --- /dev/null +++ b/backend/experiment/templates/consent/consent_musical_preferences.html @@ -0,0 +1,76 @@ +{% load i18n %} +

{% translate "Dear participant," %}

+

+{% blocktranslate %} +You will be taking part in the Musical Preferences research project conducted by Xuan Huang under the supervision of Prof. Henkjan Honing and Dr. John Ashley Burgoyne of the Music Cognition Group at the University of Amsterdam’s Institute for Logic, Language, and Computation. +{% endblocktranslate %} +

+ +

{% translate "Purpose of the research project" %}

+ +

+{% blocktranslate %} +Studies have shown that cultural preferences and familiarity for music start in infancy and continue throughout adolescence and adulthood. People tend to prefer music from their own cultural traditions. This research will help us understand individual and situational influences on musical preferences and investigate the factors that underly musical preferences in China. For example, do people who have preferences for classical music also have preferences for Chinese traditional music? Are there cultural-specific or universal structural features for musical preferences? +{% endblocktranslate %} +

+ +{% load i18n %} +

{% translate "Who can take part in this research?" %}

+ +

+ {% blocktranslate %} + Anybody with sufficiently good hearing, natural or corrected, to enjoy music listening is welcome to participate in this research. Your device must be able to play audio, and you must have a sufficiently strong data connection to be able to stream short MP3 files. Headphones are recommended for the best results, but you may also use either internal or external loudspeakers. You should adjust the volume of your device so that it is comfortable for you. + {% endblocktranslate %} +

+ +

{% translate "Instructions" %}

+

+{% blocktranslate %} +This study is a music preference experiment in which you will hear 64 music clips throughout the experiment, you either wear headphones or use your device's speakers to listen to the clips. Adjust the volume level of your device before the experiment begins. +{% endblocktranslate %} +

+ +

+{% blocktranslate %} +The experiment has two parts. The first part is a questionnaire with 6 questions. The second part is a music preference test, where you will listen to a music clip and answer questions about it. The results of your music preferences will be available after the experiment is completed. +{% endblocktranslate %} +

+ +

{% translate "Voluntary participation" %}

+ +

+{% blocktranslate %} +You will be participating in this research project on a voluntary basis. This means you are free to stop taking part at any stage without consequences or penalty. If you decide to stop or withdraw your consent, all the information gathered up until then will be permanently deleted. +{% endblocktranslate %} +

+ +

{% translate "Confidential treatment of your details" %}

+ +

+{% blocktranslate %} +The information gathered over the course of this research will be used for further analysis and publication in scientific journals only. Fully anonymised data collected during the experiment may be made available online in tandem with these scientific publications. We guarantee that you will remain anonymous under all circumstances. Your personal details will not be viewed by third parties without your express permission. +{% endblocktranslate %} +

+ +{% load i18n %} +

{% translate "Further Information" %}

+ +

+ {% blocktranslate %} For further information, please contact Xuan Huang (x.huang@uva.nl) or Dr. John Ashley Burgoyne (j.a.burgoyne@uva.nl). If you have any complaints regarding this project, you can contact the Secretary of the Ethics Committee of the Faculty of Humanities of the University of Amsterdam (commissie-ethiek-fgw@uva.nl). + {% endblocktranslate %} +

+ +

+ {% blocktranslate %} + If you have any complaints regarding this research project, you can contact the secretary of the Ethics Committee of the Faculty of Humanities of the University of Amsterdam (phone number: +31 20 525 3054; e-mail: commissie-ethiek-fgw@uva.nl; Kloveniersburgwal 48, 1012 CX Amsterdam). + {% endblocktranslate %} +

+ +

{% translate "Informed consent" %}

+ +

+ {% blocktranslate %} + I have been clearly informed about the research project and I consent to participate in this research. I retain the right to revoke this consent without having to provide any reasons for my decision. I am aware that I am entitled to discontinue the research at any time and can withdraw my participation. + {% endblocktranslate %} +

+ diff --git a/backend/experiment/templates/html/musical_preferences/feedback.html b/backend/experiment/templates/html/musical_preferences/feedback.html index 98fc917da..500631c46 100644 --- a/backend/experiment/templates/html/musical_preferences/feedback.html +++ b/backend/experiment/templates/html/musical_preferences/feedback.html @@ -1,5 +1,5 @@ {% load i18n %} -

{{unlocked}}{% translate "Unlocked" %}

+

{{unlocked}}

diff --git a/backend/locale/zh/LC_MESSAGES/django.mo b/backend/locale/zh/LC_MESSAGES/django.mo index 29402aee6557e0133f0a3076ac056de1984a53b2..fb66c0802309dd193071e783cf45023a60dd3ef6 100644 GIT binary patch delta 10796 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Μ)Cv5y+AGzuX-Ds7V9;wRdzH z7d{;y4*lbO`!I$RbJh+ zvm#Jk5ZbyjSh(8CEwr-ot$p>@hTPDqox$a6LZ$1hn*D*=JnLYkwXz{tywj@7v<|Eb zZax{xJIXj#^@(6^R;aej$~hX`R2isxwrTr@;O2eOazkz~r@*SNr0)AXbGe=}P`6dj z5vVQ113hb?YOR@X>q_kq?He1mH0`d|ep^RZSye}@wFiSa&(JGSv#RmHUM6EqnPx?H za7%g1V)Xbd$*MnQ`Pa*8eYN|n{I$UyEAc2$Rc39gw+api>WcJaEggdO#a3~twQX0Z za+i2~a-Fq*xva9hx^Z7au&~<7FR`+#bgy9XnwF0E5!_sE73>dG@1(JwB2c$0RJ$|W z*jLcf`a+#H73j{on^m@%i9>6uts`4o_9B>57~FECDQi8JP^};DrNPN8M&QC|EZ=7x z+0pcDE+Yr3N+j|tO0Aq#_-zXvJ{+jZ)Ow(*rtzq6MR4c7rlKR(`sZaix!G31q4CnC z=t$F^&COkEa$CAw8kpemb&chl=oegG%0@J1ts;23L1@kD;F04bfwgT%sBB|sTa}ev z(K0CQaa~&as?Bo4>nN7(EH2ggq8DKu2`5WIUSr<#*2y9~(o59aPmoxT_#4hv9XZ`m zmhR@M|SwVhzpmtxNo>Z!A%&Z6&*AVAGeM4wtY2%TTR>^9K z|C+|2M!CJGv@#qTH!`ab`)}YV^hEVNx-9@*TW#kk#W@byq z=u_RWnuAKx(Kk?A8>rtDEIMIjZfVL~6I^$&DKpbrT@%`sAQu3g16AvriZgY)P{FFu z#$#dQM(ucT)6wAiBeKnV4h4@^1*)^HoLx;@O7Q8@0~vg7w`BD5&xLmGW7ejg82DR5BvMC+`prtF)-iZ`z#QSYFGir8S4uD##74%nwxWA0aKm3JVNW<&o1ZM_z)E z^9+*&x336pC~4Z5$^2x2Zr_-h8!Xz@w7WK#Ul2IC?b6kRJNios28_(4eOa(&_t_&_46P{NbulVr5j8?u#Nv5)r{}izVLopxeZo1i;b5IM5 zIT2Cj7B3ZSjX@8*}h4Fsl1$v=wn`{$TSC;>mm!-3%mri-}cAeb( zdgU=4t?U!>is51|mMKFy$Ntxp`jz_4n`_(kGW%X$$y-wLF?_Hpo;sTl(dp8deE#m{ eu9pUh!7HAAZ${g8+OvvN=N@cb5%XzH`~L$po2Q@v delta 7163 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\n" "Language-Team: LANGUAGE \n" @@ -50,7 +50,7 @@ msgid "points" msgstr "分" #: experiment/actions/final.py:59 experiment/rules/hooked.py:107 -#: experiment/rules/thats_my_song.py:81 +#: experiment/rules/thats_my_song.py:87 msgid "Play again" msgstr "再玩一次" @@ -65,14 +65,14 @@ msgstr "实验结束" #: experiment/actions/form.py:67 experiment/actions/song_sync.py:46 #: experiment/rules/eurovision_2020.py:157 experiment/rules/hooked.py:319 #: experiment/rules/huang_2022.py:159 experiment/rules/kuiper_2020.py:150 -#: experiment/rules/musical_preferences.py:118 +#: experiment/rules/musical_preferences.py:123 msgid "Yes" msgstr "是" #: experiment/actions/form.py:68 experiment/actions/song_sync.py:47 #: experiment/rules/eurovision_2020.py:156 experiment/rules/hooked.py:318 #: experiment/rules/huang_2022.py:159 experiment/rules/kuiper_2020.py:149 -#: experiment/rules/musical_preferences.py:118 +#: experiment/rules/musical_preferences.py:123 msgid "No" msgstr "否" @@ -137,7 +137,7 @@ msgstr "请选择一个曲库" msgid "Total Score" msgstr "总得分" -#: experiment/actions/score.py:42 experiment/rules/musical_preferences.py:99 +#: experiment/actions/score.py:42 experiment/rules/musical_preferences.py:104 msgid "Next" msgstr "下一首" @@ -179,7 +179,7 @@ msgid "Get ready!" msgstr "准备" #: experiment/actions/utils.py:21 experiment/actions/utils.py:31 -#: experiment/rules/musical_preferences.py:214 +#: experiment/rules/musical_preferences.py:251 msgid "End" msgstr "" @@ -854,7 +854,7 @@ msgstr "提交" msgid "We appreciate your feedback!" msgstr "" -#: experiment/rules/base.py:109 experiment/rules/musical_preferences.py:67 +#: experiment/rules/base.py:109 experiment/rules/musical_preferences.py:72 msgid "Questionnaire" msgstr "问卷调查" @@ -926,7 +926,7 @@ msgid "" msgstr "" #: experiment/rules/beat_alignment.py:91 -#: experiment/rules/musical_preferences.py:89 +#: experiment/rules/musical_preferences.py:94 #: experiment/rules/speech2song.py:48 experiment/rules/util/practice.py:112 msgid "Start" msgstr "开始" @@ -1233,22 +1233,25 @@ msgstr "当您再次听到声音时,您需要判断出此音乐与您脑海中 #: experiment/rules/hooked.py:56 experiment/rules/huang_2022.py:205 #: experiment/rules/huang_2022.py:256 -#: experiment/rules/musical_preferences.py:75 +#: experiment/rules/musical_preferences.py:80 msgid "Let's go!" msgstr "开始吧!" #: experiment/rules/hooked.py:61 experiment/rules/huang_2022.py:123 #: experiment/rules/matching_pairs.py:32 +#: experiment/rules/musical_preferences.py:51 #: experiment/rules/rhythm_experiment_series.py:45 #: experiment/rules/speech2song.py:55 #: experiment/templates/consent/consent_categorization.html:15 #: experiment/templates/consent/consent_hooked.html:79 #: experiment/templates/consent/consent_huang2021.html:88 +#: experiment/templates/consent/consent_musical_preferences.html:69 msgid "Informed consent" msgstr "知情同意声书" #: experiment/rules/hooked.py:61 experiment/rules/huang_2022.py:123 #: experiment/rules/matching_pairs.py:32 +#: experiment/rules/musical_preferences.py:51 #: experiment/rules/rhythm_experiment_series.py:45 #: experiment/rules/speech2song.py:55 msgid "I agree" @@ -1256,6 +1259,7 @@ msgstr "同意" #: experiment/rules/hooked.py:61 experiment/rules/huang_2022.py:123 #: experiment/rules/matching_pairs.py:32 +#: experiment/rules/musical_preferences.py:51 #: experiment/rules/rhythm_experiment_series.py:45 #: experiment/rules/speech2song.py:55 msgid "Stop" @@ -1322,17 +1326,17 @@ msgid "Thank you for your feedback!" msgstr "感谢您的反馈!" #: experiment/rules/huang_2022.py:156 -#: experiment/rules/musical_preferences.py:115 +#: experiment/rules/musical_preferences.py:120 msgid "Do you hear the music?" msgstr "您听到音乐了吗?" #: experiment/rules/huang_2022.py:166 -#: experiment/rules/musical_preferences.py:125 +#: experiment/rules/musical_preferences.py:130 msgid "Audio check" msgstr "音频测试" #: experiment/rules/huang_2022.py:175 -#: experiment/rules/musical_preferences.py:99 +#: experiment/rules/musical_preferences.py:104 msgid "Quit" msgstr "退出" @@ -1524,7 +1528,7 @@ msgstr "" msgid "Enter a name to enter the ICMPC hall of fame" msgstr "" -#: experiment/rules/musical_preferences.py:70 +#: experiment/rules/musical_preferences.py:75 msgid "" "To understand your musical preferences, we have {} questions for you before " "the experiment begins. The first two " @@ -1535,62 +1539,71 @@ msgstr "" "为了了解您的音乐偏好,在实验开始前请您回答{}个问题。前两个问题是关于您的音乐" "聆听经验,其他四个问题是人口统计学问题。答题需要2-3分钟左右。" -#: experiment/rules/musical_preferences.py:73 -#: experiment/rules/musical_preferences.py:87 +#: experiment/rules/musical_preferences.py:78 +#: experiment/rules/musical_preferences.py:92 msgid "Have fun!" msgstr "祝答题愉快!" -#: experiment/rules/musical_preferences.py:81 +#: experiment/rules/musical_preferences.py:86 msgid "How to play" msgstr "实验介绍" -#: experiment/rules/musical_preferences.py:83 +#: experiment/rules/musical_preferences.py:88 msgid "" "You will hear 64 music clips and have to answer two questions for each clip." msgstr "在整个实验过程中,你将听到64个音乐片段并回答与之相关的问题。" -#: experiment/rules/musical_preferences.py:84 +#: experiment/rules/musical_preferences.py:89 msgid "It will take 20-30 minutes to complete the whole experiment." msgstr "整个实验需要20至30分钟。" -#: experiment/rules/musical_preferences.py:85 +#: experiment/rules/musical_preferences.py:90 msgid "Either wear headphones or use your device's speakers." msgstr "请佩戴耳机或使用设备扬声器。" -#: experiment/rules/musical_preferences.py:86 +#: experiment/rules/musical_preferences.py:91 msgid "Your final results will be displayed at the end." msgstr "您的实验结果将在最后显示。" -#: experiment/rules/musical_preferences.py:106 +#: experiment/rules/musical_preferences.py:111 msgid "Tech check" msgstr "调试阶段" -#: experiment/rules/musical_preferences.py:131 -msgid "Love " -msgstr "乐" +#: experiment/rules/musical_preferences.py:136 +msgid "Love unlocked" +msgstr "解锁乐之爱" -#: experiment/rules/musical_preferences.py:142 -msgid "Knowledge " -msgstr "识" +#: experiment/rules/musical_preferences.py:147 +msgid "Knowledge unlocked" +msgstr "解锁乐之识" -#: experiment/rules/musical_preferences.py:157 -msgid "Connection " -msgstr "友" +#: experiment/rules/musical_preferences.py:164 +msgid "Connection unlocked" +msgstr "解锁乐之友" -#: experiment/rules/musical_preferences.py:171 +#: experiment/rules/musical_preferences.py:184 msgid "2. How much do you like this song?" msgstr "2. 您对这首歌的喜欢程度是?" -#: experiment/rules/musical_preferences.py:177 +#: experiment/rules/musical_preferences.py:190 msgid "1. Do you know this song?" msgstr "1. 您知道这首歌吗?" -#: experiment/rules/musical_preferences.py:193 +#: experiment/rules/musical_preferences.py:206 +#, python-format +msgid "Song %(round)i/%(total)i" +msgstr "%(round)i/%(total)i首歌" + +#: experiment/rules/musical_preferences.py:228 #, python-format -msgid "Song %(round)i out of %(total)i" -msgstr "%(round)i/%(total)i 首" +msgid "" +"I explored musical preferences on %(url)s! My top 3 favorite songs: " +"%(top_participant)s. I know %(known_songs)i out of %(n_songs)i songs. All " +"players' top 3 songs: %(top_all)s" +msgstr "" +"一起探索音乐喜好!%(url)s 我最喜欢的三首歌曲:%(top_participant)s;我知道%(n_songs)i首歌曲中的%(known_songs)i首;其他人最喜爱的三首歌曲:%(top_all)s。" -#: experiment/rules/musical_preferences.py:215 +#: experiment/rules/musical_preferences.py:252 #: experiment/templates/final/musical_preferences.html:2 msgid "Thank you for your participation and contribution to science!" msgstr "感谢您的参与以及对科学的贡献!" @@ -1869,11 +1882,11 @@ msgstr "听起来完全像音乐" msgid "Listen carefully" msgstr "请认真聆听" -#: experiment/rules/thats_my_song.py:103 +#: experiment/rules/thats_my_song.py:109 msgid "Choose two or more decades of music" msgstr "" -#: experiment/rules/thats_my_song.py:116 +#: experiment/rules/thats_my_song.py:122 msgid "Playlist selection" msgstr "" @@ -2084,6 +2097,7 @@ msgstr "" #: experiment/templates/consent/consent_categorization.html:13 #: experiment/templates/consent/consent_hooked.html:66 #: experiment/templates/consent/consent_huang2021.html:76 +#: experiment/templates/consent/consent_musical_preferences.html:56 #: experiment/templates/consent/consent_rhythm.html:17 #: experiment/templates/consent/consent_rhythm_unpaid.html:15 #: experiment/templates/consent/consent_speech2song.html:62 @@ -2150,6 +2164,7 @@ msgstr "" #: experiment/templates/consent/consent_categorization.html:5 #: experiment/templates/consent/consent_hooked.html:22 #: experiment/templates/consent/consent_huang2021.html:23 +#: experiment/templates/consent/consent_musical_preferences.html:18 msgid "Who can take part in this research?" msgstr "谁能参与这项研究?" @@ -2207,6 +2222,7 @@ msgstr "" #: experiment/templates/consent/consent_categorization.html:11 #: experiment/templates/consent/consent_hooked.html:58 #: experiment/templates/consent/consent_huang2021.html:67 +#: experiment/templates/consent/consent_musical_preferences.html:47 #: experiment/templates/consent/consent_speech2song.html:45 msgid "Confidential treatment of your details" msgstr "信息匿名和保密性" @@ -2281,6 +2297,7 @@ msgstr "" #: experiment/templates/consent/consent_hooked.html:8 #: experiment/templates/consent/consent_huang2021.html:11 +#: experiment/templates/consent/consent_musical_preferences.html:9 #: experiment/templates/consent/consent_speech2song.html:11 msgid "Purpose of the research project" msgstr "本研究目的" @@ -2317,6 +2334,7 @@ msgstr "" "碍患者的工作和生活开发新的方法等。" #: experiment/templates/consent/consent_hooked.html:25 +#: experiment/templates/consent/consent_musical_preferences.html:21 msgid "" "\n" " Anybody with sufficiently good hearing, natural or corrected, to enjoy " @@ -2372,6 +2390,7 @@ msgstr "" #: experiment/templates/consent/consent_hooked.html:43 #: experiment/templates/consent/consent_huang2021.html:52 +#: experiment/templates/consent/consent_musical_preferences.html:39 #: experiment/templates/consent/consent_speech2song.html:28 msgid "Voluntary participation" msgstr "自愿参与" @@ -2437,6 +2456,7 @@ msgid "" msgstr "" #: experiment/templates/consent/consent_hooked.html:74 +#: experiment/templates/consent/consent_musical_preferences.html:64 msgid "" "\n" " If you have any complaints regarding this research project, you can " @@ -2703,6 +2723,119 @@ msgstr "" "销我的参与,且无需说明任何理由。如果我决定终止或撤销我的参与,那么在此之前收" "集的所有我的资料将会被永久删除。" +#: experiment/templates/consent/consent_musical_preferences.html:2 +msgid "Dear participant," +msgstr "尊敬的参与者:" + +#: experiment/templates/consent/consent_musical_preferences.html:4 +msgid "" +"\n" +"You will be taking part in the Musical Preferences research project " +"conducted by Xuan Huang under the supervision of Prof. Henkjan Honing and " +"Dr. John Ashley Burgoyne of the Music Cognition Group at the University of " +"Amsterdam’s Institute for Logic, Language, and Computation. \n" +msgstr "" +"\n" +"您即将参加由阿姆斯特丹大学逻辑、语言和计算研究所(ILLC)音乐认知实验组的博" +"士研究生Xuan Huang 主持的《“中国音乐饵”与记忆》的研究项目。在正式参与该研究项" +"目之前,请您仔细阅读我们的知情同意书以了解实验程序。\n" + +#: experiment/templates/consent/consent_musical_preferences.html:12 +msgid "" +"\n" +"Studies have shown that cultural preferences and familiarity for music start " +"in infancy and continue throughout adolescence and adulthood. People tend to " +"prefer music from their own cultural traditions. This research will help us " +"understand individual and situational influences on musical preferences and " +"investigate the factors that underly musical preferences in China. For " +"example, do people who have preferences for classical music also have " +"preferences for Chinese traditional music? Are there cultural-specific or " +"universal structural features for musical preferences? \n" +msgstr "" +"\n" +"研究表明,人们对音乐的文化偏好和熟悉程度从婴儿期开始显现,并持续到整个青春期和成年期。人们会偏好他们文化上熟悉的音乐。这项研究将帮助我们了解个人和情景对音乐偏好的影响,以及构成中国听众音乐偏好的潜在因素。例如,对西方古典音乐有偏好的人是否也对中国传统音乐有偏好?音乐偏好是否存在特定的文化或普遍的结构特征?" +"\n" + +#: experiment/templates/consent/consent_musical_preferences.html:26 +msgid "Instructions" +msgstr "研究说明与过程" + +#: experiment/templates/consent/consent_musical_preferences.html:28 +msgid "" +"\n" +"This study is a music preference experiment in which you will hear 64 music " +"clips throughout the experiment, you either wear headphones or use your " +"device's speakers to listen to the clips. Adjust the volume level of your " +"device before the experiment begins. \n" +msgstr "" +"\n" +"该研究是一个音乐偏好实验,在整个实验里您将听到64个音乐片段,您可以佩戴耳机或使用设备的扬声器来聆听片段。在实验正式开始前调整好您的设备音量的大小。\n" + +#: experiment/templates/consent/consent_musical_preferences.html:34 +msgid "" +"\n" +"The experiment has two parts. The first part is a questionnaire with 6 " +"questions. The second part is a music preference test, where you will listen " +"to a music clip and answer questions about it. The results of your music " +"preferences will be available after the experiment is completed. \n" +msgstr "" +"\n" +"该实验有两个部分。 第一部分为调查问卷,包含6个问题。 第二部分为音乐偏好测试,您将聆听音乐片段并回答相关问题。您的音乐偏好结果将在整个实验完成后获得。\n" + +#: experiment/templates/consent/consent_musical_preferences.html:42 +msgid "" +"\n" +"You will be participating in this research project on a voluntary basis. " +"This means you are free to stop taking part at any stage without " +"consequences or penalty. If you decide to stop or withdraw your consent, all " +"the information gathered up until then will be permanently deleted. \n" +msgstr "" +"\n" +"参加本研究是完全自愿的。您可以拒绝参加研究,或者在研究过程中的任何时候选择退出研究,不需任何理由,且您的数据将被永久删除。" +"这项研究没有已知的风险。\n" + +#: experiment/templates/consent/consent_musical_preferences.html:50 +msgid "" +" \n" +"The information gathered over the course of this research will be used for " +"further analysis and publication in scientific journals only. Fully " +"anonymised data collected during the experiment may be made available online " +"in tandem with these scientific publications. We guarantee that you will " +"remain anonymous under all circumstances. Your personal details will not be " +"viewed by third parties without your express permission.\n" +msgstr "" +" \n" +"在此研究过程中所搜集的信息仅用于科学研究。数据完全匿名,可能会随着研究结果发表一同展示。我们保证您在任何情况下都将保持匿名。此外,未经您的明确许可,您的个人信息将不会被第三方查看 \n" + +#: experiment/templates/consent/consent_musical_preferences.html:59 +msgid "" +" For further information, please contact Xuan Huang (x.huang@uva.nl) or Dr. " +"John Ashley Burgoyne (j.a.burgoyne@uva.nl). If you have any complaints " +"regarding this project, you can contact the Secretary of the Ethics " +"Committee of the Faculty of Humanities of the University of Amsterdam " +"(commissie-ethiek-fgw@uva.nl). \n" +msgstr "" +"如您需了解关于本研究项目的更多信息,请联系Xuan Huang(邮箱: x.huang@uva.nl; " +"地址: Science Park 107, 1098 GE Amsterdam)或者John A. Burgoyne 博士 ( 电话: " +"+31205257034;邮箱: j.a.burgoyne@uva.nl; 地址: Science Park 107, 1098 GE " +"Amsterdam)。如果您对此研究项目有任何投诉,请联系阿姆斯特丹大学人文学院伦理委" +"员会秘书 (the secretary of the Ethics Committee of the Faculty of Humanities " +"of the University of Amsterdam),电话: +31205253054;邮箱: commissie-ethiek-" +"fgw@uva.nl; 地址: Kloveniersburgwal 48, 1012 CX Amsterdam。\n" + +#: experiment/templates/consent/consent_musical_preferences.html:72 +msgid "" +" \n" +" I have been clearly informed about the research project and I consent to " +"participate in this research. I retain the right to revoke this consent " +"without having to provide any reasons for my decision. I am aware that I am " +"entitled to discontinue the research at any time and can withdraw my " +"participation. \n" +msgstr "" +" \n" +"我已经阅读了知情同意书,我同意参与该项研究。我有权撤销这一同意而无须提供任何" +"理由。我知道我有权在任何时候中止研究,可以撤回我的参与。\n" + #: experiment/templates/consent/consent_rhythm.html:2 #: experiment/templates/consent/consent_rhythm_unpaid.html:2 msgid "" @@ -3104,15 +3237,13 @@ msgstr "检查网络连接。" msgid "Or try at another time when you are ready" msgstr "或者一切准备就绪后换其它时间再尝试。" -#: experiment/templates/html/musical_preferences/feedback.html:2 -msgid "Unlocked" -msgstr "解锁乐之" - #: experiment/templates/html/musical_preferences/feedback.html:11 +#, python-format msgid " Your top 3 favourite songs out of %(n_songs)s:" msgstr "在%(n_songs)s首歌曲里,您最喜欢的3首歌曲是:" #: experiment/templates/html/musical_preferences/feedback.html:30 +#, python-format msgid " Of %(n_songs)s songs, you know %(n_known_songs)s" msgstr "在%(n_songs)s首歌曲里,您知道 %(n_known_songs)s的歌曲。" @@ -3145,6 +3276,13 @@ msgstr "您可以复制以下您参与实验的用户信息链接以便下次继 msgid "copy" msgstr "复制" +#: section/admin.py:92 +msgid "Cannot upload {}: {}" +msgstr "" + +#~ msgid " Love" +#~ msgstr "乐" + #~ msgid "Score" #~ msgstr "得分" From 6e7ce5b0226881c4a910066f53ee23f37fcf9b9e Mon Sep 17 00:00:00 2001 From: jaburgoyne Date: Tue, 24 Oct 2023 14:10:00 +0200 Subject: [PATCH 02/21] Half-finished MusicGens changes --- backend/experiment/questions/musicgens.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/backend/experiment/questions/musicgens.py b/backend/experiment/questions/musicgens.py index 73bd49d3e..177ed7751 100644 --- a/backend/experiment/questions/musicgens.py +++ b/backend/experiment/questions/musicgens.py @@ -7,10 +7,10 @@ def musicgens_question(key, question): question = question, choices = { 1: "Never", - 2: "Not Very Often", - 3: "Occasionally", + 2: "Rarely", + 3: "Once in a while", 4: "Sometimes", - 5: "Very Often", + 5: "Very often", 6: "Always" }, explainer = "Please tell us how much you agree" @@ -159,7 +159,7 @@ def musicgens_question(key, question): choices = { 1: "Yes", 0: "No", - -1: "I'm Not Sure" + -1: "I'm not sure" } ), RadiosQuestion( @@ -168,7 +168,7 @@ def musicgens_question(key, question): choices = { 1: "Yes", 0: "No", - -1: "I'm Not Sure" + -1: "I'm not sure" } ), RadiosQuestion( @@ -177,7 +177,7 @@ def musicgens_question(key, question): choices = { 1: "Yes", 0: "No", - -1: "I'm Not Sure" + -1: "I'm not sure" } ), musicgens_question( @@ -261,3 +261,7 @@ def musicgens_question(key, question): "Hearing good music makes me want to sing along." ) ] + +MUSICGENS_EXTRA = [ + +] \ No newline at end of file From e890ce87f615434daa263f5197fe5b72d2ffa312 Mon Sep 17 00:00:00 2001 From: BeritJanssen Date: Wed, 25 Oct 2023 09:49:07 +0200 Subject: [PATCH 03/21] update translations --- .../consent/consent_musical_preferences.html | 9 +-- backend/locale/zh/LC_MESSAGES/django.mo | Bin 65588 -> 65594 bytes backend/locale/zh/LC_MESSAGES/django.po | 63 ++++++++++++------ 3 files changed, 44 insertions(+), 28 deletions(-) diff --git a/backend/experiment/templates/consent/consent_musical_preferences.html b/backend/experiment/templates/consent/consent_musical_preferences.html index 8291d1385..702439067 100644 --- a/backend/experiment/templates/consent/consent_musical_preferences.html +++ b/backend/experiment/templates/consent/consent_musical_preferences.html @@ -60,17 +60,10 @@

{% translate "Further Information" %}

{% endblocktranslate %}

-

- {% blocktranslate %} - If you have any complaints regarding this research project, you can contact the secretary of the Ethics Committee of the Faculty of Humanities of the University of Amsterdam (phone number: +31 20 525 3054; e-mail: commissie-ethiek-fgw@uva.nl; Kloveniersburgwal 48, 1012 CX Amsterdam). - {% endblocktranslate %} -

-

{% translate "Informed consent" %}

{% blocktranslate %} - I have been clearly informed about the research project and I consent to participate in this research. I retain the right to revoke this consent without having to provide any reasons for my decision. I am aware that I am entitled to discontinue the research at any time and can withdraw my participation. - {% endblocktranslate %} + I have been clearly informed about the research project and I consent to participate in this research. I retain the right to revoke this consent without having to provide any reasons for my decision. I am aware that I am entitled to discontinue the research at any time and can withdraw my participation. {% endblocktranslate %}

diff --git a/backend/locale/zh/LC_MESSAGES/django.mo b/backend/locale/zh/LC_MESSAGES/django.mo index fb66c0802309dd193071e783cf45023a60dd3ef6..e33e5075bca8fa11c06e97807180976e6147f578 100644 GIT binary patch delta 5268 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 Bq-g*E delta 5258 zcmXZfdwkDjAII^}ZzGJ^W^7|O8SQT7Fz3U~94587<5tKahZb?8MkHDELy`!qRqL)h z#GONQi_P(|DPf8n(&Bc?woEHmFsFTOKewOS~f8Y&FjBZZ-qkKWNquxArhwi822$i>Cgkz0A6Vn3dpejOlHbO8Ke2 zX4%Ad_jCQeGr;T^@$7+SG_~P_&6;7sU<=xE8k{5J63!n=rx?t19d#aNmP!1=aI<_Y zeZuS@zA@5lNT}J!QD!N0RQ#kF*>)8x;2&Ol%B&)BMWnh#VI{1As(<%WL9@F^B#yqm@@$MCec?8`^`cmkHAJUEp^4-zv_Gdh6k z;1Jfwb9fJijdf?1f*LpzAI7n$fj`3-+=tq!vseYMVs#81$F^e}D!&QRPte+vh$JHe zb*Tp8Uop$aZ+cgv&aw#aY$3)G@53lOj}7rUHpj%L&62S{K8P=(+8@B$cm(S*zFi}s zna7Pc%fS>JgP&qNHk#lXq+|!g~V4 z7~g&+p|iS$&G4>?Zb#Z;E#eH+N`|BE#sXA_>%3c01MbHA@F1pP?6W*w9EchC7V@I4 z6h~mgN$h_jiPuSJrkk)SUc)|^^qg61oQjWP0j6T)WV1Ec6Z_+BRQ-P0X2Wnbw!z5f z&AMSaYQXu}60cxqOrFC2KR{y46qk{Y8sIW&tD8?XyBEhI-z3Y!);x<+e1tfb?Tf`M z?=1W`@j{%A?Wehk6=4J7YGn4t4w!^F)2XPf-%Lg%Zugd84dSz?+jthUY zM^t%VT#1jPCSK)5H*f~V5ii7QxDhqpZq!6df+RF>(oC~D*ba4;{ZY^CF$~2lRK4+7 z9bZHp&D+=&_oF^k(Jz^WU>($i6R;e1@cCU(6Sxm+W3VTQswAGo=J-6Sga4v#>soAp zJ5gWAU$8u0#m0CGHE{AQvvJr8d*U)|gjX;T>%Htg)#=ECv*(Z<4%+u5YLa2I-O6g= zDZ&)g#G+o|JB@X{o$=1jV14qlP%C^LHQ_v8z6vW4Z^j7RhJV4YeEH9qr1yV|L=**y zb6m%5P#tzdon3d-iie>(8s*C;qbB$Qs{K5?3m0J+EvC%0NwE0P3!cK}}#R4#I3~i-%FK zC31l?34=O|&Lq@e9VTNDcEby(j+^ATFJWiYnGV8+_zG%b>#-ePMjb(u*WA&hc}HL~ z^5>v-vJf@V&t7Byl_(}71$X0ztoQ~tApRiNeQ5S$BysQ!_bt!Cro<;u16O7H)K5BA z#0ODF(HC`;gHU%N)8~)!`QzSX|Eo|ikqkAQft7JCszIL5Uxey#g?A0=5^g~4*bdYs z{snbsD!t{NUp>?WQ!xoAp>}SuFaI(~LJiMjJO=XIN@`;)JCT4dVY|1TpZtq&0CBf> z&F;rdeD2QC?$7t!2k6{Fewc`J7CBokcIE%W!{mSRK5w6Pc}v(q3?8TU1q#AHFk{#4 zDqh3c%lI>j3e%PoOZmBR=-Av+_EgDslUKv%NT|z^s)1 zk~f$g$I2TyHoSmM0-S&GCbL~+T-nTQXi&6;SrVrfa=VGkP=6zaZ*_kouBUJ&@v?31 z=o)V4w}6SX^)A@Sxf7qG(`f2-*v;``uRSg<{?h%H9Nnv5OU}RkKDL?$|3nQu?SQlM zS8k?u(D^MU(NW>obc$z7m=Nvi9dh6N=p*h=wq96)ejY|$zJaLMH55Z}G*-ea3^2Yu zM?wvC~gdxXV2WhBhnSqJ;2qxeZtbq$r6D`2*xD{2u5;si0YB8v|rMC-eXL_RAXJR}~ zI?n#LAd%}U?!pM-64X0BLe9p$I7HP$}Gpx6hKu@JTL^QehlM%BOR z^ILuAKE-LMdckK%sN!_g7R^S@>|IR20#wCAK0b{-iOZjM`F*^ZsD83g6Pt+I+104K zRO<69o^dHWuEbR9l~`cZiYRbdY@L#z0`n_xO>;BlCXn=uW0{NV0P zj(0J>O#a6>5ZnI93&UL0r8|jT@Fq55d`tbwU5e4D%l8cGC}#RN4|TbgdyBkZqqh8_ z_Yy85zJ~QM?`QW%=oVCe5x=

tPk*<{0cvqLVMkMV#EA0292^ zFqwFsk2hf-;+?21ul1YTi4k}&@hjf7s3Sh|8~b0EM9lAQMs2VfaYx*N5BdC<%Wmsx zdmE!Bl8SY)J8DH^eExVJ2T?1Zg|#pTYvL*l!=0+2h6hk*d>A9}C!b%2YEbTqt5*j# zaH5Z!`?wvd-TglQ5uZO8TaZ86yAT@_AH--3+EtfP9jB9#hPu@|P+L}kKL++-3aX=< zsDV=ca4YMCiZi?ePzxI6%g3Q!K{kftH>d@ib_VSdiO0w&^94h$yE7ewx*Knyj$}Q? z;pf;CPkF1|aA(~W?;(Eys$K!=x$X5{M7@ggH{Ar2FjVh9\n" "Language-Team: LANGUAGE \n" @@ -1245,7 +1245,7 @@ msgstr "开始吧!" #: experiment/templates/consent/consent_categorization.html:15 #: experiment/templates/consent/consent_hooked.html:79 #: experiment/templates/consent/consent_huang2021.html:88 -#: experiment/templates/consent/consent_musical_preferences.html:69 +#: experiment/templates/consent/consent_musical_preferences.html:63 msgid "Informed consent" msgstr "知情同意声书" @@ -1601,7 +1601,9 @@ msgid "" "%(top_participant)s. I know %(known_songs)i out of %(n_songs)i songs. All " "players' top 3 songs: %(top_all)s" msgstr "" -"一起探索音乐喜好!%(url)s 我最喜欢的三首歌曲:%(top_participant)s;我知道%(n_songs)i首歌曲中的%(known_songs)i首;其他人最喜爱的三首歌曲:%(top_all)s。" +"一起探索音乐喜好!%(url)s 我最喜欢的三首歌曲:%(top_participant)s;我知" +"道%(n_songs)i首歌曲中的%(known_songs)i首;其他人最喜爱的三首歌曲:" +"%(top_all)s。" #: experiment/rules/musical_preferences.py:252 #: experiment/templates/final/musical_preferences.html:2 @@ -2456,7 +2458,6 @@ msgid "" msgstr "" #: experiment/templates/consent/consent_hooked.html:74 -#: experiment/templates/consent/consent_musical_preferences.html:64 msgid "" "\n" " If you have any complaints regarding this research project, you can " @@ -2736,9 +2737,9 @@ msgid "" "Amsterdam’s Institute for Logic, Language, and Computation. \n" msgstr "" "\n" -"您即将参加由阿姆斯特丹大学逻辑、语言和计算研究所(ILLC)音乐认知实验组的博" -"士研究生Xuan Huang 主持的《“中国音乐饵”与记忆》的研究项目。在正式参与该研究项" -"目之前,请您仔细阅读我们的知情同意书以了解实验程序。\n" +"您即将参加由阿姆斯特丹大学逻辑、语言和计算研究所(ILLC)音乐认知实验组的博士" +"研究生Xuan Huang 主持的《“中国音乐饵”与记忆》的研究项目。在正式参与该研究项目" +"之前,请您仔细阅读我们的知情同意书以了解实验程序。\n" #: experiment/templates/consent/consent_musical_preferences.html:12 msgid "" @@ -2753,8 +2754,11 @@ msgid "" "universal structural features for musical preferences? \n" msgstr "" "\n" -"研究表明,人们对音乐的文化偏好和熟悉程度从婴儿期开始显现,并持续到整个青春期和成年期。人们会偏好他们文化上熟悉的音乐。这项研究将帮助我们了解个人和情景对音乐偏好的影响,以及构成中国听众音乐偏好的潜在因素。例如,对西方古典音乐有偏好的人是否也对中国传统音乐有偏好?音乐偏好是否存在特定的文化或普遍的结构特征?" -"\n" +"研究表明,人们对音乐的文化偏好和熟悉程度从婴儿期开始显现,并持续到整个青春期" +"和成年期。人们会偏好他们文化上熟悉的音乐。这项研究将帮助我们了解个人和情景对" +"音乐偏好的影响,以及构成中国听众音乐偏好的潜在因素。例如,对西方古典音乐有偏" +"好的人是否也对中国传统音乐有偏好?音乐偏好是否存在特定的文化或普遍的结构特" +"征?\n" #: experiment/templates/consent/consent_musical_preferences.html:26 msgid "Instructions" @@ -2769,7 +2773,8 @@ msgid "" "device before the experiment begins. \n" msgstr "" "\n" -"该研究是一个音乐偏好实验,在整个实验里您将听到64个音乐片段,您可以佩戴耳机或使用设备的扬声器来聆听片段。在实验正式开始前调整好您的设备音量的大小。\n" +"该研究是一个音乐偏好实验,在整个实验里您将听到64个音乐片段,您可以佩戴耳机或" +"使用设备的扬声器来聆听片段。在实验正式开始前调整好您的设备音量的大小。\n" #: experiment/templates/consent/consent_musical_preferences.html:34 msgid "" @@ -2780,7 +2785,8 @@ msgid "" "preferences will be available after the experiment is completed. \n" msgstr "" "\n" -"该实验有两个部分。 第一部分为调查问卷,包含6个问题。 第二部分为音乐偏好测试,您将聆听音乐片段并回答相关问题。您的音乐偏好结果将在整个实验完成后获得。\n" +"该实验有两个部分。 第一部分为调查问卷,包含6个问题。 第二部分为音乐偏好测试," +"您将聆听音乐片段并回答相关问题。您的音乐偏好结果将在整个实验完成后获得。\n" #: experiment/templates/consent/consent_musical_preferences.html:42 msgid "" @@ -2791,8 +2797,8 @@ msgid "" "the information gathered up until then will be permanently deleted. \n" msgstr "" "\n" -"参加本研究是完全自愿的。您可以拒绝参加研究,或者在研究过程中的任何时候选择退出研究,不需任何理由,且您的数据将被永久删除。" -"这项研究没有已知的风险。\n" +"参加本研究是完全自愿的。您可以拒绝参加研究,或者在研究过程中的任何时候选择退" +"出研究,不需任何理由,且您的数据将被永久删除。这项研究没有已知的风险。\n" #: experiment/templates/consent/consent_musical_preferences.html:50 msgid "" @@ -2805,7 +2811,9 @@ msgid "" "viewed by third parties without your express permission.\n" msgstr "" " \n" -"在此研究过程中所搜集的信息仅用于科学研究。数据完全匿名,可能会随着研究结果发表一同展示。我们保证您在任何情况下都将保持匿名。此外,未经您的明确许可,您的个人信息将不会被第三方查看 \n" +"在此研究过程中所搜集的信息仅用于科学研究。数据完全匿名,可能会随着研究结果发" +"表一同展示。我们保证您在任何情况下都将保持匿名。此外,未经您的明确许可,您的" +"个人信息将不会被第三方查看 \n" #: experiment/templates/consent/consent_musical_preferences.html:59 msgid "" @@ -2814,27 +2822,29 @@ msgid "" "regarding this project, you can contact the Secretary of the Ethics " "Committee of the Faculty of Humanities of the University of Amsterdam " "(commissie-ethiek-fgw@uva.nl). \n" +" " msgstr "" -"如您需了解关于本研究项目的更多信息,请联系Xuan Huang(邮箱: x.huang@uva.nl; " -"地址: Science Park 107, 1098 GE Amsterdam)或者John A. Burgoyne 博士 ( 电话: " +"如您需了解关于本研究项目的更多信息,请联系Xuan Huang(邮箱: x.huang@uva.nl; 地" +"址: Science Park 107, 1098 GE Amsterdam)或者John A. Burgoyne 博士 ( 电话: " "+31205257034;邮箱: j.a.burgoyne@uva.nl; 地址: Science Park 107, 1098 GE " "Amsterdam)。如果您对此研究项目有任何投诉,请联系阿姆斯特丹大学人文学院伦理委" "员会秘书 (the secretary of the Ethics Committee of the Faculty of Humanities " "of the University of Amsterdam),电话: +31205253054;邮箱: commissie-ethiek-" "fgw@uva.nl; 地址: Kloveniersburgwal 48, 1012 CX Amsterdam。\n" +" " -#: experiment/templates/consent/consent_musical_preferences.html:72 +#: experiment/templates/consent/consent_musical_preferences.html:66 msgid "" " \n" " I have been clearly informed about the research project and I consent to " "participate in this research. I retain the right to revoke this consent " "without having to provide any reasons for my decision. I am aware that I am " "entitled to discontinue the research at any time and can withdraw my " -"participation. \n" +"participation. " msgstr "" " \n" -"我已经阅读了知情同意书,我同意参与该项研究。我有权撤销这一同意而无须提供任何" -"理由。我知道我有权在任何时候中止研究,可以撤回我的参与。\n" +"我已经阅读了知情同意书,我同意参与该项研究。我有权撤销这一同意而无须提供任何理" +"由。我知道我有权在任何时候中止研究,可以撤回我的参与。" #: experiment/templates/consent/consent_rhythm.html:2 #: experiment/templates/consent/consent_rhythm_unpaid.html:2 @@ -3280,6 +3290,19 @@ msgstr "复制" msgid "Cannot upload {}: {}" msgstr "" +#~ msgid "" +#~ "\n" +#~ " If you have any complaints regarding this research project, you can " +#~ "contact the secretary of the Ethics Committee of the Faculty of " +#~ "Humanities of the University of Amsterdam (phone number: +31 20 525 3054; " +#~ "e-mail: commissie-ethiek-fgw@uva.nl; Kloveniersburgwal 48, 1012 CX " +#~ "Amsterdam)." +#~ msgstr "" +#~ "\n" +#~ "如果我对该研究有投诉,我可以联系阿姆斯特丹大学人文学院伦理委员会秘书 (电" +#~ "话:+31 20 525 3054;电子邮件:commissie-ethiek-fgw@uva.nl ; 地址:" +#~ "Kloveniersburgwal 48, 1012 CX Amsterdam)。" + #~ msgid " Love" #~ msgstr "乐" From a3673f55d3a732861e20fd099ebce02dbbb190b0 Mon Sep 17 00:00:00 2001 From: Evert-R Date: Mon, 30 Oct 2023 07:53:59 +0100 Subject: [PATCH 04/21] filter browsed file formats on upload --- backend/section/forms.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/section/forms.py b/backend/section/forms.py index c68dca51d..ebe1784af 100644 --- a/backend/section/forms.py +++ b/backend/section/forms.py @@ -10,4 +10,5 @@ class AddSections(forms.Form): name = forms.CharField(max_length=128, required=False) tag = forms.CharField(max_length=128, required=False) group = forms.CharField(max_length=128, required=False) - files = forms.FileField(widget=MultipleFileInput, validators=[audio_file_validator()]) + files = forms.FileField(widget=MultipleFileInput(attrs={'accept':'.wav,.mp3,.aiff,.flac,.ogg'}), + validators=[audio_file_validator()]) From a34f68b21e7bd0080caf533e765a5428554696da Mon Sep 17 00:00:00 2001 From: Evert-R Date: Mon, 30 Oct 2023 07:57:57 +0100 Subject: [PATCH 05/21] add file format help text --- .../experiment/templates/add-sections.html | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/backend/experiment/templates/add-sections.html b/backend/experiment/templates/add-sections.html index a86b3b32a..3bbc9a186 100644 --- a/backend/experiment/templates/add-sections.html +++ b/backend/experiment/templates/add-sections.html @@ -10,13 +10,18 @@ .select-fields p { display: inline-block; } + + .help-text { + color: var(--body-quiet-color); + font-size: 12px; + } + .song-help { position: relative; - top: 7.3rem; - color: var(--body-quiet-color); + top: 7.3rem; margin-left: 5rem; - font-size: 12px; } + p label { display: block; } @@ -49,7 +54,7 @@

Add sections to playlist: {{playlist.name}}

-
* Fill out both the artist and name fields to create a new song object
+
* Fill out both the artist and name fields to create a new song object
{% csrf_token %} {{ form.as_p }} {% render_inline_action_fields %} {% if form.errors %}
@@ -60,7 +65,7 @@

Add sections to playlist: {{playlist.name}}

{% endif %}
- +
* Allowed audio file formats: WAV, MP3, FLAC, OGG
@@ -69,4 +74,24 @@

Add sections to playlist: {{playlist.name}}

+ + {% endblock %} From 3b89275c5276f51e294fe2d5d032d49dcbd28ab8 Mon Sep 17 00:00:00 2001 From: BeritJanssen Date: Mon, 30 Oct 2023 14:13:15 +0100 Subject: [PATCH 06/21] update formatting and translations --- .../experiment/rules/musical_preferences.py | 4 ++-- backend/locale/zh/LC_MESSAGES/django.mo | Bin 65594 -> 65688 bytes backend/locale/zh/LC_MESSAGES/django.po | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/backend/experiment/rules/musical_preferences.py b/backend/experiment/rules/musical_preferences.py index fffe73620..b3f8c89ab 100644 --- a/backend/experiment/rules/musical_preferences.py +++ b/backend/experiment/rules/musical_preferences.py @@ -203,8 +203,8 @@ def next_round(self, session, request_session=None): view = Trial( playback=playback, feedback_form=form, - title=_('Song %(round)i/%(total)i' %{ - 'round': n_songs, 'total': session.experiment.rounds}), + title=_('Song %(round)s/%(total)s') %{ + 'round': n_songs, 'total': session.experiment.rounds}, config={ 'response_time': section.duration + .1, } diff --git a/backend/locale/zh/LC_MESSAGES/django.mo b/backend/locale/zh/LC_MESSAGES/django.mo index e33e5075bca8fa11c06e97807180976e6147f578..c8cc8eee12332c233652b68d4d527c0eb5e918b3 100644 GIT binary patch delta 7141 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 delta 7055 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 Olk)%8v#B@YBmM=LYo}KL diff --git a/backend/locale/zh/LC_MESSAGES/django.po b/backend/locale/zh/LC_MESSAGES/django.po index e639487d0..37ba011e0 100755 --- a/backend/locale/zh/LC_MESSAGES/django.po +++ b/backend/locale/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-25 09:45+0200\n" +"POT-Creation-Date: 2023-10-30 14:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -576,7 +576,7 @@ msgstr "11或以上" #: experiment/questions/goldsmiths.py:153 msgid "I listen attentively to music for _ per day." -msgstr "" +msgstr "我每天专心聆听音乐___。" #: experiment/questions/goldsmiths.py:155 msgid "0-15 min" @@ -640,7 +640,7 @@ msgstr "当我听到一首音乐时,我通常能确定它的流派(类型) #: experiment/questions/goldsmiths.py:210 msgid "I have had formal training in music theory for _ years." -msgstr "您接受了多少年音乐理论方面的专业培训?" +msgstr "我接受过正式的音乐理论培训__年。" #: experiment/questions/goldsmiths.py:214 #: experiment/questions/goldsmiths.py:230 @@ -655,7 +655,7 @@ msgstr "7或以上" msgid "" "I have had _ years of formal training on a musical instrument (including " "voice) during my lifetime." -msgstr "您接受了多少年乐器(包括声乐)方面的专业培训?" +msgstr "在我的人生中,我接受过__年的正规乐器训练(包括声乐)。" #: experiment/questions/goldsmiths.py:233 msgid "3-5" @@ -1591,8 +1591,8 @@ msgstr "1. 您知道这首歌吗?" #: experiment/rules/musical_preferences.py:206 #, python-format -msgid "Song %(round)i/%(total)i" -msgstr "%(round)i/%(total)i首歌" +msgid "Song %(round)s/%(total)s" +msgstr "%(round)s/%(total)s首歌" #: experiment/rules/musical_preferences.py:228 #, python-format From 6bfab760d1e81c117aa2b48c55114d4c4b8cbde7 Mon Sep 17 00:00:00 2001 From: BeritJanssen Date: Mon, 30 Oct 2023 14:30:20 +0100 Subject: [PATCH 07/21] adjust styling --- frontend/src/components/HTML/HTML.scss | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/HTML/HTML.scss b/frontend/src/components/HTML/HTML.scss index a5a6d2ed5..a538d1ed2 100644 --- a/frontend/src/components/HTML/HTML.scss +++ b/frontend/src/components/HTML/HTML.scss @@ -40,7 +40,7 @@ } .card.bg-blue { - height: 20vh; + height: 21vh; background-color: $blue; span { @@ -55,6 +55,19 @@ .card-body { text-align: left; + padding-top: 1vh; + ul { + padding: 0; + } + } + + .card-title { + padding: 0; + font-size: 2.5vh; + } + + .card-text { + font-size: 2vh; } } From be8cf51281154bfcc34510b178cbeb3b0ae3c8fd Mon Sep 17 00:00:00 2001 From: BeritJanssen Date: Mon, 30 Oct 2023 14:50:33 +0100 Subject: [PATCH 08/21] change offsets to intended values --- backend/experiment/rules/musical_preferences.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/experiment/rules/musical_preferences.py b/backend/experiment/rules/musical_preferences.py index b3f8c89ab..15a5bf54d 100644 --- a/backend/experiment/rules/musical_preferences.py +++ b/backend/experiment/rules/musical_preferences.py @@ -24,8 +24,8 @@ class MusicalPreferences(Base): ID = 'MUSICAL_PREFERENCES' consent_file = 'consent_musical_preferences.html' - preference_offset = 4 #20 - knowledge_offset = 6 #42 + preference_offset = 20 + knowledge_offset = 42 round_increment = 1 know_score = { From 499a62976a50c5809b540691528bd1850292bd24 Mon Sep 17 00:00:00 2001 From: Evert-R Date: Tue, 31 Oct 2023 09:54:12 +0100 Subject: [PATCH 09/21] Validate file types before submitting --- .../experiment/templates/add-sections.html | 42 +++++++++++-------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/backend/experiment/templates/add-sections.html b/backend/experiment/templates/add-sections.html index 3bbc9a186..67c8d1a66 100644 --- a/backend/experiment/templates/add-sections.html +++ b/backend/experiment/templates/add-sections.html @@ -16,6 +16,11 @@ font-size: 12px; } + .text-red { + color: var(--error-fg); + font-size: 13px; + } + .song-help { position: relative; top: 7.3rem; @@ -65,7 +70,7 @@

Add sections to playlist: {{playlist.name}}

{% endif %}
-
* Allowed audio file formats: WAV, MP3, FLAC, OGG
+
* Allowed audio file formats: WAV, MP3, FLAC, OGG
@@ -76,22 +81,25 @@

Add sections to playlist: {{playlist.name}}

+ {% endblock %} From 65a1d851e902c7662b717a8c0b98d6b1b5089df7 Mon Sep 17 00:00:00 2001 From: BeritJanssen Date: Tue, 31 Oct 2023 11:50:12 +0100 Subject: [PATCH 10/21] close #495: increase steps of slider for centering --- frontend/src/components/Question/_TextRange.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/frontend/src/components/Question/_TextRange.js b/frontend/src/components/Question/_TextRange.js index a562f8fb2..0206de9fe 100644 --- a/frontend/src/components/Question/_TextRange.js +++ b/frontend/src/components/Question/_TextRange.js @@ -5,7 +5,11 @@ import classNames from "classnames"; import RangeLimits from "./_RangeLimits"; import RangeTitle from "./_RangeTitle"; -// TextRange is a question view that makes you select a value within the given range, using a slider from a list of choices +/** + * TextRange is a question view that makes you select a value within the given range, using a slider from a list of choices + * Values are multiplied by 10 to be displayed as a slider. + * This to ensure that the slider is centered initially, even if we don't have a center value + * */ const TextRange = ({ question, value, onChange, emphasizeTitle }) => { const emptyValue = !value; @@ -13,14 +17,14 @@ const TextRange = ({ question, value, onChange, emphasizeTitle }) => { const choices = Object.values(question.choices); const onSliderChange = (index) => { - onChange(keys[index]); + onChange(keys[Math.round(index/10)]); }; let sliderValue = 0; if (emptyValue) { - sliderValue = Math.round(keys.length / 2) - 1; + sliderValue = Math.round(keys.length * 5) - 5; } else { - sliderValue = keys.indexOf(value); + sliderValue = keys.indexOf(value) * 10; } return ( @@ -38,7 +42,7 @@ const TextRange = ({ question, value, onChange, emphasizeTitle }) => { value={sliderValue} onChange={onSliderChange} min={0} - max={choices.length - 1} + max={(choices.length * 10) - 10} tooltip={false} /> From 43b854fb97aaaeee357b9881f933225a3c04404f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Nov 2023 22:13:41 +0000 Subject: [PATCH 11/21] Bump django from 3.2.20 to 3.2.23 in /backend/requirements Bumps [django](https://github.com/django/django) from 3.2.20 to 3.2.23. - [Commits](https://github.com/django/django/compare/3.2.20...3.2.23) --- updated-dependencies: - dependency-name: django dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- backend/requirements/dev.txt | 2 +- backend/requirements/prod.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/requirements/dev.txt b/backend/requirements/dev.txt index c96f47cc6..caf4f14c7 100644 --- a/backend/requirements/dev.txt +++ b/backend/requirements/dev.txt @@ -16,7 +16,7 @@ certifi==2023.7.22 # via requests charset-normalizer==2.1.0 # via requests -django==3.2.20 +django==3.2.23 # via # -r requirements.in/base.txt # django-cors-headers diff --git a/backend/requirements/prod.txt b/backend/requirements/prod.txt index 0b8766f65..1ffad430a 100644 --- a/backend/requirements/prod.txt +++ b/backend/requirements/prod.txt @@ -8,7 +8,7 @@ asgiref==3.7.2 # via django audioread==3.0.0 # via -r requirements.in/base.txt -django==3.2.20 +django==3.2.23 # via # -r requirements.in/base.txt # django-cors-headers From 51b4624501becc648a31da034d921a10624ea41e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 11 Nov 2023 15:22:49 +0000 Subject: [PATCH 12/21] Bump axios from 1.5.0 to 1.6.0 in /frontend Bumps [axios](https://github.com/axios/axios) from 1.5.0 to 1.6.0. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.5.0...v1.6.0) --- updated-dependencies: - dependency-name: axios dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- frontend/package.json | 2 +- frontend/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index 66f31a7f1..4f721a523 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -7,7 +7,7 @@ "@testing-library/jest-dom": "^5.16.1", "@testing-library/react": "^12.1.2", "@testing-library/user-event": "^13.5.0", - "axios": ">=0.25.0", + "axios": ">=1.6.0", "classnames": "^2.2.6", "email-validator": "^2.0.4", "file-saver": "^2.0.5", diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 1dd4e656b..52f18c401 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -2960,10 +2960,10 @@ axe-core@^4.6.2: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== -axios@>=0.25.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.0.tgz#f02e4af823e2e46a9768cfc74691fdd0517ea267" - integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ== +axios@>=1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.0.tgz#f1e5292f26b2fd5c2e66876adc5b06cdbd7d2102" + integrity sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg== dependencies: follow-redirects "^1.15.0" form-data "^4.0.0" From c0354c086133b8aec3210839239578ca1fae1db8 Mon Sep 17 00:00:00 2001 From: BeritJanssen Date: Mon, 13 Nov 2023 15:40:06 +0100 Subject: [PATCH 13/21] Introduce welcome screen with translations --- .../experiment/rules/musical_preferences.py | 12 +- backend/locale/zh/LC_MESSAGES/django.mo | Bin 65688 -> 65891 bytes backend/locale/zh/LC_MESSAGES/django.po | 155 +++++++++--------- 3 files changed, 92 insertions(+), 75 deletions(-) diff --git a/backend/experiment/rules/musical_preferences.py b/backend/experiment/rules/musical_preferences.py index 15a5bf54d..e34309136 100644 --- a/backend/experiment/rules/musical_preferences.py +++ b/backend/experiment/rules/musical_preferences.py @@ -51,10 +51,18 @@ def first_round(self, experiment): text=rendered, title=_('Informed consent'), confirm=_('I agree'), deny=_('Stop') ) playlist = Playlist(experiment.playlists.all()) + explainer = Explainer( + instruction=_('Welcome to the Musical Preferences experiment!'), + steps=[ + Step(_('Please start by checking your connection quality.')) + ], + button_label=_('OK') + ) start_session = StartSession() return [ consent, playlist, + explainer, start_session ] @@ -97,7 +105,7 @@ def next_round(self, session, request_session=None): else: session.decrement_round() if last_result.question_key == 'audio_check1': - playback = get_test_playback() + playback = get_test_playback('EXTERNAL') html = HTML(body=render_to_string('html/huang_2022/audio_check.html')) form = Form(form=[BooleanQuestion( key='audio_check2', @@ -116,7 +124,7 @@ def next_round(self, session, request_session=None): return Redirect(settings.HOMEPAGE) else: session.decrement_round() - playback = get_test_playback() + playback = get_test_playback('EXTERNAL') html = HTML(body='

{}

'.format(_('Do you hear the music?'))) form = Form(form=[BooleanQuestion( key='audio_check1', diff --git a/backend/locale/zh/LC_MESSAGES/django.mo b/backend/locale/zh/LC_MESSAGES/django.mo index c8cc8eee12332c233652b68d4d527c0eb5e918b3..bab1a29dbc829c65dd9319b51d900da4dd95bff9 100644 GIT binary patch delta 6595 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 diff --git a/backend/locale/zh/LC_MESSAGES/django.po b/backend/locale/zh/LC_MESSAGES/django.po index 37ba011e0..6ec17c091 100755 --- a/backend/locale/zh/LC_MESSAGES/django.po +++ b/backend/locale/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-30 14:04+0100\n" +"POT-Creation-Date: 2023-11-13 15:36+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -49,7 +49,7 @@ msgstr "最终得分" msgid "points" msgstr "分" -#: experiment/actions/final.py:59 experiment/rules/hooked.py:107 +#: experiment/actions/final.py:59 experiment/rules/hooked.py:108 #: experiment/rules/thats_my_song.py:87 msgid "Play again" msgstr "再玩一次" @@ -62,17 +62,17 @@ msgstr "我的结果" msgid "All experiments" msgstr "实验结束" -#: experiment/actions/form.py:67 experiment/actions/song_sync.py:46 -#: experiment/rules/eurovision_2020.py:157 experiment/rules/hooked.py:319 -#: experiment/rules/huang_2022.py:159 experiment/rules/kuiper_2020.py:150 -#: experiment/rules/musical_preferences.py:123 +#: experiment/actions/form.py:67 experiment/actions/song_sync.py:51 +#: experiment/rules/eurovision_2020.py:159 experiment/rules/hooked.py:321 +#: experiment/rules/huang_2022.py:160 experiment/rules/kuiper_2020.py:150 +#: experiment/rules/musical_preferences.py:131 msgid "Yes" msgstr "是" -#: experiment/actions/form.py:68 experiment/actions/song_sync.py:47 -#: experiment/rules/eurovision_2020.py:156 experiment/rules/hooked.py:318 -#: experiment/rules/huang_2022.py:159 experiment/rules/kuiper_2020.py:149 -#: experiment/rules/musical_preferences.py:123 +#: experiment/actions/form.py:68 experiment/actions/song_sync.py:52 +#: experiment/rules/eurovision_2020.py:158 experiment/rules/hooked.py:320 +#: experiment/rules/huang_2022.py:160 experiment/rules/kuiper_2020.py:149 +#: experiment/rules/musical_preferences.py:131 msgid "No" msgstr "否" @@ -114,8 +114,8 @@ msgid "Completely Agree" msgstr "完全同意" #: experiment/actions/form.py:177 experiment/actions/trial.py:50 -#: experiment/actions/utils.py:25 experiment/rules/hooked.py:169 -#: experiment/rules/huang_2022.py:217 +#: experiment/actions/utils.py:25 experiment/rules/hooked.py:170 +#: experiment/rules/huang_2022.py:218 #: experiment/rules/rhythm_experiment_series.py:36 #: experiment/rules/rhythm_experiment_series.py:72 #: experiment/rules/rhythm_experiment_series_mri.py:29 @@ -137,7 +137,7 @@ msgstr "请选择一个曲库" msgid "Total Score" msgstr "总得分" -#: experiment/actions/score.py:42 experiment/rules/musical_preferences.py:104 +#: experiment/actions/score.py:42 experiment/rules/musical_preferences.py:112 msgid "Next" msgstr "下一首" @@ -161,25 +161,25 @@ msgstr "不正确" msgid "Correct" msgstr "正确" -#: experiment/actions/song_sync.py:38 +#: experiment/actions/song_sync.py:43 msgid "Do you recognise this song?" msgstr "您是否认出了这首歌曲?" -#: experiment/actions/song_sync.py:39 +#: experiment/actions/song_sync.py:44 msgid "Keep imagining the music" msgstr "继续默唱音乐" -#: experiment/actions/song_sync.py:40 +#: experiment/actions/song_sync.py:45 msgid "Did the track come back in the right place?" msgstr "歌曲回到正确的位置了吗?" -#: experiment/actions/song_sync.py:41 experiment/rules/eurovision_2020.py:149 -#: experiment/rules/hooked.py:311 experiment/rules/kuiper_2020.py:142 +#: experiment/actions/song_sync.py:46 experiment/rules/eurovision_2020.py:151 +#: experiment/rules/hooked.py:313 experiment/rules/kuiper_2020.py:142 msgid "Get ready!" msgstr "准备" #: experiment/actions/utils.py:21 experiment/actions/utils.py:31 -#: experiment/rules/musical_preferences.py:251 +#: experiment/rules/musical_preferences.py:259 msgid "End" msgstr "" @@ -854,7 +854,7 @@ msgstr "提交" msgid "We appreciate your feedback!" msgstr "" -#: experiment/rules/base.py:109 experiment/rules/musical_preferences.py:72 +#: experiment/rules/base.py:109 experiment/rules/musical_preferences.py:80 msgid "Questionnaire" msgstr "问卷调查" @@ -926,7 +926,7 @@ msgid "" msgstr "" #: experiment/rules/beat_alignment.py:91 -#: experiment/rules/musical_preferences.py:94 +#: experiment/rules/musical_preferences.py:102 #: experiment/rules/speech2song.py:48 experiment/rules/util/practice.py:112 msgid "Start" msgstr "开始" @@ -1081,7 +1081,7 @@ msgid "" "tone, or LONGER." msgstr "" -#: experiment/rules/eurovision_2020.py:159 experiment/rules/hooked.py:321 +#: experiment/rules/eurovision_2020.py:161 experiment/rules/hooked.py:323 #: experiment/rules/kuiper_2020.py:152 msgid "Did you hear this song in previous rounds?" msgstr "您是否在之前的识别环节里听到过这首歌曲?" @@ -1208,7 +1208,7 @@ msgid "" "cultures, much more complex meters also exist!" msgstr "" -#: experiment/rules/hooked.py:49 experiment/rules/huang_2022.py:198 +#: experiment/rules/hooked.py:50 experiment/rules/huang_2022.py:199 msgid "" "Do you recognise the song? Try to sing along. The faster you recognise " "songs, the more points you can earn." @@ -1217,7 +1217,7 @@ msgstr "" "能识别出该音乐”,同时请在大脑中跟唱这段音乐。您在15秒内识别出歌曲的速度越快," "您就能获得更多的分数。" -#: experiment/rules/hooked.py:51 experiment/rules/huang_2022.py:200 +#: experiment/rules/hooked.py:52 experiment/rules/huang_2022.py:201 msgid "" "Do you really know the song? Keep singing or imagining the music while the " "sound is muted. The music is still playing: you just can’t hear it!" @@ -1225,19 +1225,19 @@ msgstr "" "当您识别出某首歌曲且点击'是'的瞬间,音乐声从这一秒开始会被静音。请您继续将静" "音前的音乐在脑海中接唱下去直到该音乐再次播放为止。" -#: experiment/rules/hooked.py:53 experiment/rules/huang_2022.py:202 +#: experiment/rules/hooked.py:54 experiment/rules/huang_2022.py:203 msgid "" "Was the music in the right place when the sound came back? Or did we jump to " "a different spot during the silence?" msgstr "当您再次听到声音时,您需要判断出此音乐与您脑海中的音乐是否同步。" -#: experiment/rules/hooked.py:56 experiment/rules/huang_2022.py:205 -#: experiment/rules/huang_2022.py:256 -#: experiment/rules/musical_preferences.py:80 +#: experiment/rules/hooked.py:57 experiment/rules/huang_2022.py:206 +#: experiment/rules/huang_2022.py:257 +#: experiment/rules/musical_preferences.py:88 msgid "Let's go!" msgstr "开始吧!" -#: experiment/rules/hooked.py:61 experiment/rules/huang_2022.py:123 +#: experiment/rules/hooked.py:62 experiment/rules/huang_2022.py:124 #: experiment/rules/matching_pairs.py:32 #: experiment/rules/musical_preferences.py:51 #: experiment/rules/rhythm_experiment_series.py:45 @@ -1249,7 +1249,7 @@ msgstr "开始吧!" msgid "Informed consent" msgstr "知情同意声书" -#: experiment/rules/hooked.py:61 experiment/rules/huang_2022.py:123 +#: experiment/rules/hooked.py:62 experiment/rules/huang_2022.py:124 #: experiment/rules/matching_pairs.py:32 #: experiment/rules/musical_preferences.py:51 #: experiment/rules/rhythm_experiment_series.py:45 @@ -1257,7 +1257,7 @@ msgstr "知情同意声书" msgid "I agree" msgstr "同意" -#: experiment/rules/hooked.py:61 experiment/rules/huang_2022.py:123 +#: experiment/rules/hooked.py:62 experiment/rules/huang_2022.py:124 #: experiment/rules/matching_pairs.py:32 #: experiment/rules/musical_preferences.py:51 #: experiment/rules/rhythm_experiment_series.py:45 @@ -1265,19 +1265,19 @@ msgstr "同意" msgid "Stop" msgstr "停止" -#: experiment/rules/hooked.py:163 +#: experiment/rules/hooked.py:164 msgid "Bonus Rounds" msgstr "奖励环节" -#: experiment/rules/hooked.py:165 +#: experiment/rules/hooked.py:166 msgid "Listen carefully to the music." msgstr "请仔细地听音乐。" -#: experiment/rules/hooked.py:166 +#: experiment/rules/hooked.py:167 msgid "Did you hear the same song during previous rounds?" msgstr "您是否在之前的音乐识别环节里听到过同一首歌曲?" -#: experiment/rules/hooked.py:209 +#: experiment/rules/hooked.py:210 #, python-format msgid "Round %(number)d / %(total)d" msgstr "%(number)d / %(total)d轮" @@ -1317,42 +1317,42 @@ msgstr "" msgid "Contact (optional):" msgstr "微信号、手机、邮箱等(选填):" -#: experiment/rules/huang_2022.py:136 +#: experiment/rules/huang_2022.py:137 msgid "Any remarks or questions (optional):" msgstr "请写下您的意见或建议:" -#: experiment/rules/huang_2022.py:137 +#: experiment/rules/huang_2022.py:138 msgid "Thank you for your feedback!" msgstr "感谢您的反馈!" -#: experiment/rules/huang_2022.py:156 -#: experiment/rules/musical_preferences.py:120 +#: experiment/rules/huang_2022.py:157 +#: experiment/rules/musical_preferences.py:128 msgid "Do you hear the music?" msgstr "您听到音乐了吗?" -#: experiment/rules/huang_2022.py:166 -#: experiment/rules/musical_preferences.py:130 +#: experiment/rules/huang_2022.py:167 +#: experiment/rules/musical_preferences.py:138 msgid "Audio check" msgstr "音频测试" -#: experiment/rules/huang_2022.py:175 -#: experiment/rules/musical_preferences.py:104 +#: experiment/rules/huang_2022.py:176 +#: experiment/rules/musical_preferences.py:112 msgid "Quit" msgstr "退出" -#: experiment/rules/huang_2022.py:175 +#: experiment/rules/huang_2022.py:176 msgid "Try" msgstr "运行" -#: experiment/rules/huang_2022.py:182 +#: experiment/rules/huang_2022.py:183 msgid "Ready to experiment" msgstr "调试阶段" -#: experiment/rules/huang_2022.py:195 +#: experiment/rules/huang_2022.py:196 msgid "How to Play" msgstr "实验介绍" -#: experiment/rules/huang_2022.py:207 +#: experiment/rules/huang_2022.py:208 msgid "" "You can use your smartphone, computer or tablet to participate in this " "experiment. Please choose the best network in your area to participate in " @@ -1366,12 +1366,12 @@ msgstr "" "网络环境不佳,有可能会导致音乐加载失败或实验运行不流畅等情况出现。您可以通过" "以下的渠道打开实验页面:" -#: experiment/rules/huang_2022.py:210 +#: experiment/rules/huang_2022.py:211 msgid "" "Directly click the link on WeChat (smart phone or PC version, or WeChat Web)" msgstr "通过手机微信或电脑微信客户端/网页版的链接直接点开进入到实验页面;" -#: experiment/rules/huang_2022.py:213 +#: experiment/rules/huang_2022.py:214 msgid "" "If the link to load the experiment page through the WeChat app on your cell " "phone fails, you can copy and paste the link in the browser of your cell " @@ -1382,29 +1382,29 @@ msgstr "" "通过复制黏贴实验链接到浏览器参与实验。您可以使用市面上目前的任何一种浏览器," "如Safari、火狐、360等等。" -#: experiment/rules/huang_2022.py:252 +#: experiment/rules/huang_2022.py:253 msgid "" "Please answer some questions on your musical " "(Goldsmiths-MSI) and demographic background" msgstr "接下来是《金史密斯音乐素养》水平测试与人口统计特征问卷。" -#: experiment/rules/huang_2022.py:296 +#: experiment/rules/huang_2022.py:297 msgid "Thank you for your contribution to science!" msgstr "感谢您的参与以及对科学的贡献!" -#: experiment/rules/huang_2022.py:298 +#: experiment/rules/huang_2022.py:299 msgid "Well done!" msgstr "太棒了!" -#: experiment/rules/huang_2022.py:298 +#: experiment/rules/huang_2022.py:299 msgid "Too bad!" msgstr "有点糟哦!" -#: experiment/rules/huang_2022.py:300 +#: experiment/rules/huang_2022.py:301 msgid "You did not recognise any songs at first." msgstr "您起初并没有识别出任何歌曲。" -#: experiment/rules/huang_2022.py:302 +#: experiment/rules/huang_2022.py:303 #, python-format msgid "" "It took you %(n_seconds)d s to recognise a song on average, " @@ -1414,7 +1414,7 @@ msgstr "" "您平均花了 %(n_seconds)d 秒识别出一首歌曲,并且在您认为您知道的 %(n_total)d " "首歌曲里, 您正确地识别出了 %(n_correct)d 首。" -#: experiment/rules/huang_2022.py:308 +#: experiment/rules/huang_2022.py:309 #, python-format msgid "" "During the bonus rounds, you remembered %(n_correct)d of the %(n_total)d " @@ -1489,6 +1489,7 @@ msgid "" msgstr "" #: experiment/rules/listening_conditions.py:113 +#: experiment/rules/musical_preferences.py:59 #: experiment/rules/speech2song.py:94 msgid "OK" msgstr "好" @@ -1528,7 +1529,15 @@ msgstr "" msgid "Enter a name to enter the ICMPC hall of fame" msgstr "" -#: experiment/rules/musical_preferences.py:75 +#: experiment/rules/musical_preferences.py:55 +msgid "Welcome to the Musical Preferences experiment!" +msgstr "欢迎参加音乐偏好实验!" + +#: experiment/rules/musical_preferences.py:57 +msgid "Please start by checking your connection quality." +msgstr "请先检查您的网络连接质量。" + +#: experiment/rules/musical_preferences.py:83 msgid "" "To understand your musical preferences, we have {} questions for you before " "the experiment begins. The first two " @@ -1539,62 +1548,62 @@ msgstr "" "为了了解您的音乐偏好,在实验开始前请您回答{}个问题。前两个问题是关于您的音乐" "聆听经验,其他四个问题是人口统计学问题。答题需要2-3分钟左右。" -#: experiment/rules/musical_preferences.py:78 -#: experiment/rules/musical_preferences.py:92 +#: experiment/rules/musical_preferences.py:86 +#: experiment/rules/musical_preferences.py:100 msgid "Have fun!" msgstr "祝答题愉快!" -#: experiment/rules/musical_preferences.py:86 +#: experiment/rules/musical_preferences.py:94 msgid "How to play" msgstr "实验介绍" -#: experiment/rules/musical_preferences.py:88 +#: experiment/rules/musical_preferences.py:96 msgid "" "You will hear 64 music clips and have to answer two questions for each clip." msgstr "在整个实验过程中,你将听到64个音乐片段并回答与之相关的问题。" -#: experiment/rules/musical_preferences.py:89 +#: experiment/rules/musical_preferences.py:97 msgid "It will take 20-30 minutes to complete the whole experiment." msgstr "整个实验需要20至30分钟。" -#: experiment/rules/musical_preferences.py:90 +#: experiment/rules/musical_preferences.py:98 msgid "Either wear headphones or use your device's speakers." msgstr "请佩戴耳机或使用设备扬声器。" -#: experiment/rules/musical_preferences.py:91 +#: experiment/rules/musical_preferences.py:99 msgid "Your final results will be displayed at the end." msgstr "您的实验结果将在最后显示。" -#: experiment/rules/musical_preferences.py:111 +#: experiment/rules/musical_preferences.py:119 msgid "Tech check" msgstr "调试阶段" -#: experiment/rules/musical_preferences.py:136 +#: experiment/rules/musical_preferences.py:144 msgid "Love unlocked" msgstr "解锁乐之爱" -#: experiment/rules/musical_preferences.py:147 +#: experiment/rules/musical_preferences.py:155 msgid "Knowledge unlocked" msgstr "解锁乐之识" -#: experiment/rules/musical_preferences.py:164 +#: experiment/rules/musical_preferences.py:172 msgid "Connection unlocked" msgstr "解锁乐之友" -#: experiment/rules/musical_preferences.py:184 +#: experiment/rules/musical_preferences.py:192 msgid "2. How much do you like this song?" msgstr "2. 您对这首歌的喜欢程度是?" -#: experiment/rules/musical_preferences.py:190 +#: experiment/rules/musical_preferences.py:198 msgid "1. Do you know this song?" msgstr "1. 您知道这首歌吗?" -#: experiment/rules/musical_preferences.py:206 +#: experiment/rules/musical_preferences.py:214 #, python-format msgid "Song %(round)s/%(total)s" msgstr "%(round)s/%(total)s首歌" -#: experiment/rules/musical_preferences.py:228 +#: experiment/rules/musical_preferences.py:236 #, python-format msgid "" "I explored musical preferences on %(url)s! My top 3 favorite songs: " @@ -1605,7 +1614,7 @@ msgstr "" "道%(n_songs)i首歌曲中的%(known_songs)i首;其他人最喜爱的三首歌曲:" "%(top_all)s。" -#: experiment/rules/musical_preferences.py:252 +#: experiment/rules/musical_preferences.py:260 #: experiment/templates/final/musical_preferences.html:2 msgid "Thank you for your participation and contribution to science!" msgstr "感谢您的参与以及对科学的贡献!" From f2f0afb22865f2da907ee10181c51e1d385029b2 Mon Sep 17 00:00:00 2001 From: jaburgoyne Date: Mon, 13 Nov 2023 17:18:51 +0100 Subject: [PATCH 14/21] Added new questions from the meta-analysis group. --- backend/experiment/questions/musicgens.py | 115 +++++++++++++++++++++- 1 file changed, 113 insertions(+), 2 deletions(-) diff --git a/backend/experiment/questions/musicgens.py b/backend/experiment/questions/musicgens.py index 177ed7751..a209d18d1 100644 --- a/backend/experiment/questions/musicgens.py +++ b/backend/experiment/questions/musicgens.py @@ -263,5 +263,116 @@ def musicgens_question(key, question): ] MUSICGENS_EXTRA = [ - -] \ No newline at end of file + RadiosQuestion( + key = "PHENOTYPES_1", + question = "Please select the sentence that describes your level of achievement in music.", + choices = { + 1: "I have no training or recognised talent in this area.", + 2: "I play one or more musical instruments proficiently.", + 3: "I have played with a recognised orchestra or band.", + 4: "I have composed an original piece of music.", + 5: "My musical talent has been critiqued in a local publication.", + 6: "My composition has been recorded.", + 7: "Recordings of my composition have been sold publicly.", + 8: "My compositions have been critiqued in a national publication.", + 9: " My compositions have been critiqued in multiple national publications." + } + ), + RadiosQuestion( + key = "PHENOTYPES_2", + question = "How engaged with music are you? Singing, playing, and even writing music counts here. Please choose the answer which describes you best.", + choices = { + 1: "I am not engaged in music at all.", + 2: "I am self-taught and play music privately, but I have never played, sung, or shown my music to others.", + 3: "I have taken lessons in music, but I have never played, sung, or shown my music to others.", + 4: "I have played or sung, or my music has been played in public concerts in my home town, but I have not been paid for this.", + 5: "I have played or sung, or my music has been played in public concerts in my home town, and I have been paid for this.", + 6: "I am professionally active as a musician.", + 7: "I am professionally active as a musiciean and have been reviewed/featured in the national or international media and/or have received an award for my musical activities." + } + ), + RadiosQuestion( + key = "PHENOTYPES_3", + question = "I have never been complimented for my talents as a musical performer.", + choices = { + 1: "Completely disagree", + 2: "Strongly disagree", + 3: "Disagree", + 4: "Neither agree nor disagree", + 5: "Agree", + 6: "Strongly agree", + 7: "Completely agree" + } + ), + RadiosQuestion( + key = "PHENOTYPES_4", + question = "To what extent do you agree that you see yourself as someone who is sophisticated in art, music, or literature?", + choices = { + 1: "Agree strongly", + 2: "Agree moderately", + 3: "Agree slightly", + 4: "Disagree slightly", + 5: "Disagree moderately", + 6: "Disagree strongly" + } + ), + RadiosQuestion( + key = "PHENOTYPES_5", + question = "At the peak of my interest, I practised ___ hours on my primary instrument (including voice).", + choices = { + 1: "0", + 2: "0.5", + 3: "1", + 4: "1.5", + 5: "3–4", + 6: "5 or more" + } + ), + RadiosQuestion( + key = "PHENOTYPES_6", + question = "How often did you play or sing during the most active period?", + choices = { + 1: "Every day", + 2: "More than 1x per week", + 3: "1x per week", + 4: "1x per month" + } + ), + RadiosQuestion( + key = "PHENOTYPES_7", + question = "How long (duration) did you play or sing during the most active period?", + choices = { + 1: "More than 1 hour per week", + 2: "1 hour per week", + 3: "Less than 1 hour per week" + } + ), + RadiosQuestion( + key = "PHENOTYPES_8", + question = "About how many hours do you usually spend each week playing a musical instrument?", + choices = { + 1: "None", + 2: "1 hour or less a week", + 3: "2–3 hours a week", + 4: "4–5 hours a week", + 5: "6–7 hours a week", + 6: "8 or more hours a week" + } + ), + RadiosQuestion( + key = "PHENOTYPES_9", + question = "Indicate approximately how many hours per week you have played or practiced any musical instrument at all, i.e., all different instruments, on average over the last 10 years.", + choices = { + 1: "less than 1 hour per week", + 2: "1 hour per week", + 3: "2 hours per week", + 4: "3 hours per week", + 5: "4–5 hours per week", + 6: "6–9 hours per week", + 7: "10–14 hours per week", + 8: "15–24 hours per week", + 9: "25–40 hours per week", + 10: "41 or more hours per week" + } + ) +] From 8ada0955ad6b11cf6492963e0681bcdd5d82d12e Mon Sep 17 00:00:00 2001 From: BeritJanssen Date: Tue, 14 Nov 2023 13:01:20 +0100 Subject: [PATCH 15/21] increment version number --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9696ec6cf..8324090b7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aml-experiments", - "version": "1.4.0", + "version": "1.5.0", "private": true, "__comment1__": "private set to true to suppress 'warning package.json: No license field'", From e43f370c613cf427b6c26d9a4e392ed88ac8610a Mon Sep 17 00:00:00 2001 From: BeritJanssen Date: Tue, 14 Nov 2023 13:59:54 +0100 Subject: [PATCH 16/21] add translations and outfactor RadiosQuestion --- backend/experiment/questions/musicgens.py | 303 +++++++++++----------- 1 file changed, 151 insertions(+), 152 deletions(-) diff --git a/backend/experiment/questions/musicgens.py b/backend/experiment/questions/musicgens.py index a209d18d1..120e1ca59 100644 --- a/backend/experiment/questions/musicgens.py +++ b/backend/experiment/questions/musicgens.py @@ -1,3 +1,5 @@ +from django.utils.translation import gettext_lazy as _ + from experiment.actions.form import LikertQuestion, RadiosQuestion def musicgens_question(key, question): @@ -6,373 +8,370 @@ def musicgens_question(key, question): key = key, question = question, choices = { - 1: "Never", - 2: "Rarely", - 3: "Once in a while", - 4: "Sometimes", - 5: "Very often", - 6: "Always" + 1: _("Never"), + 2: _("Rarely"), + 3: _("Once in a while"), + 4: _("Sometimes"), + 5: _("Very often"), + 6: _("Always") }, - explainer = "Please tell us how much you agree" + explainer = _("Please tell us how much you agree") + ) + +def musicgens_radio_question(key, question): + """Define a MusicGens question with three radio buttons """ + return RadiosQuestion( + key = key, + question = question, + choices = { + 1: _("Yes"), + 0: _("No"), + -1: _("I'm not sure") + } ) MUSICGENS_17_W_VARIANTS = [ musicgens_question( "P01_1", - "Can you clap in time with a musical beat?" + _("Can you clap in time with a musical beat?") ), musicgens_question( "P01_2", - "I can tap my foot in time with the beat of the music I hear." + _("I can tap my foot in time with the beat of the music I hear.") ), musicgens_question( "P01_3", - "When listening to music, can you move in time with the beat?" + _("When listening to music, can you move in time with the beat?") ), musicgens_question( "P02_1", - "I can recognise a piece of music after hearing just a few notes." + _("I can recognise a piece of music after hearing just a few notes.") ), musicgens_question( "P02_2", - "I can easily recognise a familiar song." + _("I can easily recognise a familiar song.") ), musicgens_question( "P02_3", - "When I hear the beginning of a song I know immediately whether I've heard it before or not." + _("When I hear the beginning of a song I know immediately whether I've heard it before or not.") ), musicgens_question( "P03_1", - "I can tell when people sing out of tune." + _("I can tell when people sing out of tune.") ), musicgens_question( "P03_2", - "I am able to judge whether someone is a good singer or not." + _("I am able to judge whether someone is a good singer or not.") ), musicgens_question( "P03_3", - "I find it difficult to spot mistakes in a performance of a song even if I know the tune." + _("I find it difficult to spot mistakes in a performance of a song even if I know the tune.") ), musicgens_question( "P04_1", - "I feel chills when I hear music that I like." + _("I feel chills when I hear music that I like.") ), musicgens_question( "P04_2", - "I get emotional listening to certain pieces of music." + _("I get emotional listening to certain pieces of music.") ), musicgens_question( "P04_3", - "I become tearful or cry when I listen to a melody that I like very much." + _("I become tearful or cry when I listen to a melody that I like very much.") ), musicgens_question( "P04_4", - "Music gives me shivers or goosebumps." + _("Music gives me shivers or goosebumps.") ), musicgens_question( "P05_1", - "When I listen to music I'm absorbed by it." + _("When I listen to music I'm absorbed by it.") ), musicgens_question( "P05_2", - "While listening to music, I become so involved that I forget about myself and my surroundings." + _("While listening to music, I become so involved that I forget about myself and my surroundings.") ), musicgens_question( "P05_3", - "When I listen to music I get so caught up in it that I don't notice anything." + _("When I listen to music I get so caught up in it that I don't notice anything.") ), musicgens_question( "P05_4", - "I feel like I am 'one' with the music." + _("I feel like I am 'one' with the music.") ), musicgens_question( "P05_5", - "I lose myself in music." + _("I lose myself in music.") ), musicgens_question( "P06_1", - "I like listening to music." + _("I like listening to music.") ), musicgens_question( "P06_2", - "I enjoy music." + _("I enjoy music.") ), musicgens_question( "P06_3", - "I listen to music for pleasure." + _("I listen to music for pleasure.") ), musicgens_question( "P06_4", - "Music is kind of an addiction for me - I couldn't live without it." + _("Music is kind of an addiction for me - I couldn't live without it.") ), musicgens_question( "P07_1", - "I can tell when people sing or play out of time with the beat of the music." + _("I can tell when people sing or play out of time with the beat of the music.") ), musicgens_question( "P07_2", - "I can hear when people are not in sync when they play a song." + _("I can hear when people are not in sync when they play a song.") ), musicgens_question( "P07_3", - "I can tell when music is sung or played in time with the beat." + _("I can tell when music is sung or played in time with the beat.") ), musicgens_question( "P08_1", - "I can sing or play a song from memory." + _("I can sing or play a song from memory.") ), musicgens_question( "P08_2", - "Singing or playing music from memory is easy for me." + _("Singing or playing music from memory is easy for me.") ), musicgens_question( "P08_3", - "I find it hard to sing or play a song from memory." + _("I find it hard to sing or play a song from memory.") ), musicgens_question( "P09_1", - "When I sing, I have no idea whether I'm in tune or not." + _("When I sing, I have no idea whether I'm in tune or not.") ), musicgens_question( "P09_2", - "I am able to hit the right notes when I sing along with a recording." + _("I am able to hit the right notes when I sing along with a recording.") ), musicgens_question( "P09_3", - "I can sing along with other people." + _("I can sing along with other people.") ), musicgens_question( "P10_1", - "I have no sense for rhythm (when I listen, play or dance to music)." + _("I have no sense for rhythm (when I listen, play or dance to music).") ), musicgens_question( "P10_2", - "Understanding the rhythm of a piece is easy for me (when I listen, play or dance to music)." + _("Understanding the rhythm of a piece is easy for me (when I listen, play or dance to music).") ), musicgens_question( "P10_3", - "I have a good sense of rhythm (when I listen, play, or dance to music)." + _("I have a good sense of rhythm (when I listen, play, or dance to music).") ), - RadiosQuestion( - key = "P11_1", - question = "Do you have absolute pitch? Absolute pitch is the ability to recognise and name an isolated musical tone without a reference tone, e.g. being able to say 'F#' if someone plays that note on the piano.", - choices = { - 1: "Yes", - 0: "No", - -1: "I'm not sure" - } + musicgens_radio_question( + "P11_1", + _("Do you have absolute pitch? Absolute pitch is the ability to recognise and name an isolated musical tone without a reference tone, e.g. being able to say 'F#' if someone plays that note on the piano."), ), - RadiosQuestion( - key="P11_2", - question="Do you have perfect pitch?", - choices = { - 1: "Yes", - 0: "No", - -1: "I'm not sure" - } + musicgens_radio_question( + "P11_2", + _("Do you have perfect pitch?"), ), - RadiosQuestion( - key="P11_3", - question="If someone plays a note on an instrument and you can't see what note it is, can you still name it (e.g. say that is a 'C' or an 'F')?", - choices = { - 1: "Yes", - 0: "No", - -1: "I'm not sure" - } + musicgens_radio_question( + "P11_3", + _("If someone plays a note on an instrument and you can't see what note it is, can you still name it (e.g. say that is a 'C' or an 'F')?") ), musicgens_question( "P12_1", - "Can you hear the difference between two melodies?" + _("Can you hear the difference between two melodies?") ), musicgens_question( "P12_2", - "I can recognise differences between melodies even if they are similar." + _("I can recognise differences between melodies even if they are similar.") ), musicgens_question( "P12_3", - "I can tell when two melodies are the same or different." + _("I can tell when two melodies are the same or different.") ), musicgens_question( "P13_1", - "I make up new melodies in my mind." + _("I make up new melodies in my mind.") ), musicgens_question( "P13_2", - "I make up songs, even when I'm just singing to myself." + _("I make up songs, even when I'm just singing to myself.") ), musicgens_question( "P13_3", - "I like to play around with new melodies that come to my mind." + _("I like to play around with new melodies that come to my mind.") ), musicgens_question( "P14_1", - "I have a melody stuck in my mind." + _("I have a melody stuck in my mind.") ), musicgens_question( "P14_2", - "I experience earworms." + _("I experience earworms.") ), musicgens_question( "P14_3", - "I get music stuck in my head." + _("I get music stuck in my head.") ), musicgens_question( "P14_4", - "I have a piece of music stuck on repeat in my head." + _("I have a piece of music stuck on repeat in my head.") ), musicgens_question( "P15_1", - "Music makes me dance." + _("Music makes me dance.") ), musicgens_question( "P15_2", - "I don't like to dance, not even with music I like." + _("I don't like to dance, not even with music I like.") ), musicgens_question( "P15_3", - "I can dance to a beat." + _("I can dance to a beat.") ), musicgens_question( "P15_4", - "I easily get into a groove when listening to music." + _("I easily get into a groove when listening to music.") ), musicgens_question( "P16_1", - "Can you hear the difference between two rhythms?" + _("Can you hear the difference between two rhythms?") ), musicgens_question( "P16_2", - "I can tell when two rhythms are the same or different." + _("I can tell when two rhythms are the same or different.") ), musicgens_question( "P16_3", - "I can recognise differences between rhythms even if they are similar." + _("I can recognise differences between rhythms even if they are similar.") ), musicgens_question( "P17_1", - "I can't help humming or singing along to music that I like." + _("I can't help humming or singing along to music that I like.") ), musicgens_question( "P17_2", - "When I hear a tune I like a lot I can't help tapping or moving to its beat." + _("When I hear a tune I like a lot I can't help tapping or moving to its beat.") ), musicgens_question( "P17_3", - "Hearing good music makes me want to sing along." + _("Hearing good music makes me want to sing along.") ) ] MUSICGENS_EXTRA = [ RadiosQuestion( key = "PHENOTYPES_1", - question = "Please select the sentence that describes your level of achievement in music.", + question = _("Please select the sentence that describes your level of achievement in music."), choices = { - 1: "I have no training or recognised talent in this area.", - 2: "I play one or more musical instruments proficiently.", - 3: "I have played with a recognised orchestra or band.", - 4: "I have composed an original piece of music.", - 5: "My musical talent has been critiqued in a local publication.", - 6: "My composition has been recorded.", - 7: "Recordings of my composition have been sold publicly.", - 8: "My compositions have been critiqued in a national publication.", - 9: " My compositions have been critiqued in multiple national publications." + 1: _("I have no training or recognised talent in this area."), + 2: _("I play one or more musical instruments proficiently."), + 3: _("I have played with a recognised orchestra or band."), + 4: _("I have composed an original piece of music."), + 5: _("My musical talent has been critiqued in a local publication."), + 6: _("My composition has been recorded."), + 7: _("Recordings of my composition have been sold publicly."), + 8: _("My compositions have been critiqued in a national publication."), + 9: _(" My compositions have been critiqued in multiple national publications.") } ), RadiosQuestion( key = "PHENOTYPES_2", - question = "How engaged with music are you? Singing, playing, and even writing music counts here. Please choose the answer which describes you best.", + question = _("How engaged with music are you? Singing, playing, and even writing music counts here. Please choose the answer which describes you best."), choices = { - 1: "I am not engaged in music at all.", - 2: "I am self-taught and play music privately, but I have never played, sung, or shown my music to others.", - 3: "I have taken lessons in music, but I have never played, sung, or shown my music to others.", - 4: "I have played or sung, or my music has been played in public concerts in my home town, but I have not been paid for this.", - 5: "I have played or sung, or my music has been played in public concerts in my home town, and I have been paid for this.", - 6: "I am professionally active as a musician.", - 7: "I am professionally active as a musiciean and have been reviewed/featured in the national or international media and/or have received an award for my musical activities." + 1: _("I am not engaged in music at all."), + 2: _("I am self-taught and play music privately, but I have never played, sung, or shown my music to others."), + 3: _("I have taken lessons in music, but I have never played, sung, or shown my music to others."), + 4: _("I have played or sung, or my music has been played in public concerts in my home town, but I have not been paid for this."), + 5: _("I have played or sung, or my music has been played in public concerts in my home town, and I have been paid for this."), + 6: _("I am professionally active as a musician."), + 7: _("I am professionally active as a musician and have been reviewed/featured in the national or international media and/or have received an award for my musical activities.") } ), RadiosQuestion( key = "PHENOTYPES_3", - question = "I have never been complimented for my talents as a musical performer.", + question = _("I have never been complimented for my talents as a musical performer."), choices = { - 1: "Completely disagree", - 2: "Strongly disagree", - 3: "Disagree", - 4: "Neither agree nor disagree", - 5: "Agree", - 6: "Strongly agree", - 7: "Completely agree" + 1: _("Completely disagree"), + 2: _("Strongly disagree"), + 3: _("Disagree"), + 4: _("Neither agree nor disagree"), + 5: _("Agree"), + 6: _("Strongly agree"), + 7: _("Completely agree") } ), RadiosQuestion( key = "PHENOTYPES_4", - question = "To what extent do you agree that you see yourself as someone who is sophisticated in art, music, or literature?", + question = _("To what extent do you agree that you see yourself as someone who is sophisticated in art, music, or literature?"), choices = { - 1: "Agree strongly", - 2: "Agree moderately", - 3: "Agree slightly", - 4: "Disagree slightly", - 5: "Disagree moderately", - 6: "Disagree strongly" + 1: _("Agree strongly"), + 2: _("Agree moderately"), + 3: _("Agree slightly"), + 4: _("Disagree slightly"), + 5: _("Disagree moderately"), + 6: _("Disagree strongly") } ), RadiosQuestion( key = "PHENOTYPES_5", - question = "At the peak of my interest, I practised ___ hours on my primary instrument (including voice).", + question = _("At the peak of my interest, I practised ___ hours on my primary instrument (including voice)."), choices = { - 1: "0", - 2: "0.5", - 3: "1", - 4: "1.5", - 5: "3–4", - 6: "5 or more" + 1: _("0"), + 2: _("0.5"), + 3: _("1"), + 4: _("1.5"), + 5: _("3–4"), + 6: _("5 or more") } ), RadiosQuestion( key = "PHENOTYPES_6", - question = "How often did you play or sing during the most active period?", + question = _("How often did you play or sing during the most active period?"), choices = { - 1: "Every day", - 2: "More than 1x per week", - 3: "1x per week", - 4: "1x per month" + 1: _("Every day"), + 2: _("More than 1x per week"), + 3: _("1x per week"), + 4: _("1x per month") } ), RadiosQuestion( key = "PHENOTYPES_7", - question = "How long (duration) did you play or sing during the most active period?", + question = _("How long (duration) did you play or sing during the most active period?"), choices = { - 1: "More than 1 hour per week", - 2: "1 hour per week", - 3: "Less than 1 hour per week" + 1: _("More than 1 hour per week"), + 2: _("1 hour per week"), + 3: _("Less than 1 hour per week") } ), RadiosQuestion( key = "PHENOTYPES_8", - question = "About how many hours do you usually spend each week playing a musical instrument?", + question = _("About how many hours do you usually spend each week playing a musical instrument?"), choices = { - 1: "None", - 2: "1 hour or less a week", - 3: "2–3 hours a week", - 4: "4–5 hours a week", - 5: "6–7 hours a week", - 6: "8 or more hours a week" + 1: _("None"), + 2: _("1 hour or less a week"), + 3: _("2–3 hours a week"), + 4: _("4–5 hours a week"), + 5: _("6–7 hours a week"), + 6: _("8 or more hours a week") } ), RadiosQuestion( key = "PHENOTYPES_9", - question = "Indicate approximately how many hours per week you have played or practiced any musical instrument at all, i.e., all different instruments, on average over the last 10 years.", + question = _("Indicate approximately how many hours per week you have played or practiced any musical instrument at all, i.e., all different instruments, on average over the last 10 years."), choices = { - 1: "less than 1 hour per week", - 2: "1 hour per week", - 3: "2 hours per week", - 4: "3 hours per week", - 5: "4–5 hours per week", - 6: "6–9 hours per week", - 7: "10–14 hours per week", - 8: "15–24 hours per week", - 9: "25–40 hours per week", - 10: "41 or more hours per week" + 1: _("less than 1 hour per week"), + 2: _("1 hour per week"), + 3: _("2 hours per week"), + 4: _("3 hours per week"), + 5: _("4–5 hours per week"), + 6: _("6–9 hours per week"), + 7: _("10–14 hours per week"), + 8: _("15–24 hours per week"), + 9: _("25–40 hours per week"), + 10: _("41 or more hours per week") } ) ] From 390c36089bf8282cdea08f51cbd92fa782feff5f Mon Sep 17 00:00:00 2001 From: albertas-jn <24507839+albertas-jn@users.noreply.github.com> Date: Tue, 14 Nov 2023 14:28:11 +0100 Subject: [PATCH 17/21] Add selecting questions for experiment from admin --- backend/experiment/admin.py | 3 +- backend/experiment/fixtures/experiment.json | 6 ++ backend/experiment/forms.py | 8 ++ .../0017_experiment_add_questions_field.py | 26 ++++++ .../0018_set_default_question_data.py | 21 +++++ backend/experiment/models.py | 11 ++- backend/experiment/questions/__init__.py | 40 +++++++++ backend/experiment/questions/demographics.py | 7 -- backend/experiment/questions/other.py | 73 +++++++++++++++ backend/experiment/rules/base.py | 11 ++- backend/experiment/rules/categorization.py | 2 - backend/experiment/rules/hooked.py | 3 + backend/experiment/rules/huang_2022.py | 89 ++----------------- .../experiment/rules/musical_preferences.py | 11 +-- .../experiment/tests/test_admin_experiment.py | 2 +- backend/section/models.py | 1 - 16 files changed, 210 insertions(+), 104 deletions(-) create mode 100644 backend/experiment/migrations/0017_experiment_add_questions_field.py create mode 100644 backend/experiment/migrations/0018_set_default_question_data.py create mode 100644 backend/experiment/questions/other.py diff --git a/backend/experiment/admin.py b/backend/experiment/admin.py index ea335a608..d5a2e3765 100644 --- a/backend/experiment/admin.py +++ b/backend/experiment/admin.py @@ -24,7 +24,7 @@ class ExperimentAdmin(InlineActionsModelAdminMixin, admin.ModelAdmin): search_fields = ['name'] inline_actions = ['export', 'export_csv'] fields = ['name', 'slug', 'url', 'hashtag', 'language', 'active', 'rules', - 'rounds', 'bonus_points', 'playlists', 'experiment_series'] + 'rounds', 'bonus_points', 'playlists', 'experiment_series','questions'] inlines = [FeedbackInline] form = ExperimentForm @@ -99,7 +99,6 @@ def export_csv(self, request, obj, parent_obj=None): export_csv.short_description = "Export CSV" - admin.site.register(Experiment, ExperimentAdmin) class ModelFormFieldAsJSON(ModelMultipleChoiceField): diff --git a/backend/experiment/fixtures/experiment.json b/backend/experiment/fixtures/experiment.json index beb0c6fdc..c788f9c3e 100644 --- a/backend/experiment/fixtures/experiment.json +++ b/backend/experiment/fixtures/experiment.json @@ -242,6 +242,9 @@ 13, 2, 1 + ], + "questions": [ + "msi_01_music_activities", "msi_03_writing", "msi_08_intrigued_styles", "msi_15_internet_search_music", "msi_21_spend_income", "msi_24_music_addiction", "msi_28_track_new", "msi_34_attended_events", "msi_38_listen_music", "msi_05_good_singer", "msi_06_song_first_time", "msi_11_spot_mistakes", "msi_12_performance_diff", "msi_13_trouble_recognising", "msi_18_out_of_beat", "msi_22_out_of_tune", "msi_23_no_idea_in_tune", "msi_26_genre", "msi_14_never_complimented", "msi_27_consider_musician", "msi_32_practice_years", "msi_33_practice_daily", "msi_35_theory_training", "msi_36_instrumental_training", "msi_37_play_instruments", "msi_04_sing_along", "msi_07_from_memory", "msi_10_sing_with_recording", "msi_17_not_sing_harmony", "msi_25_sing_public", "msi_29_sing_after_hearing", "msi_30_sing_back", "msi_02_shivers", "msi_09_rarely_emotions", "msi_16_motivate", "msi_19_identify_special", "msi_20_talk_emotions", "msi_31_memories", "msi_39_best_instrument", "dgf_genre_preference_zh", "dgf_generation", "dgf_education", "dgf_highest_qualification_expectation", "dgf_occupational_status", "dgf_region_of_origin", "dgf_region_of_residence", "dgf_gender_identity_zh", "contact" ] } }, @@ -344,6 +347,9 @@ "experiment_series": null, "playlists": [ 18 + ], + "questions": [ + "dgf_generation", "dgf_gender_identity", "P01_1", "P01_2", "P01_3", "P02_1", "P02_2", "P02_3", "P03_1", "P03_2", "P03_3", "P04_1", "P04_2", "P04_3", "P04_4", "P05_1", "P05_2", "P05_3", "P05_4", "P05_5", "P06_1", "P06_2", "P06_3", "P06_4", "P07_1", "P07_2", "P07_3", "P08_1", "P08_2", "P08_3", "P09_1", "P09_2", "P09_3", "P10_1", "P10_2", "P10_3", "P11_1", "P11_2", "P11_3", "P12_1", "P12_2", "P12_3", "P13_1", "P13_2", "P13_3", "P14_1", "P14_2", "P14_3", "P14_4", "P15_1", "P15_2", "P15_3", "P15_4", "P16_1", "P16_2", "P16_3", "P17_1", "P17_2", "P17_3" ] } }, diff --git a/backend/experiment/forms.py b/backend/experiment/forms.py index 508c9e47d..148aa680b 100644 --- a/backend/experiment/forms.py +++ b/backend/experiment/forms.py @@ -2,6 +2,9 @@ from experiment.models import Experiment from experiment.rules import EXPERIMENT_RULES +from django.forms import TypedMultipleChoiceField, CheckboxSelectMultiple +from .questions import QUESTIONS_CHOICES + # session_keys for Export CSV SESSION_CHOICES = [('experiment_id', 'Experiment ID'), ('experiment_name', 'Experiment name'), @@ -130,6 +133,11 @@ def __init__(self, *args, **kwargs): choices=choices ) + self.fields['questions'] = TypedMultipleChoiceField( + choices=QUESTIONS_CHOICES, + widget=CheckboxSelectMultiple + ) + class Meta: model = Experiment fields = ['name', 'slug', 'active', 'rules', diff --git a/backend/experiment/migrations/0017_experiment_add_questions_field.py b/backend/experiment/migrations/0017_experiment_add_questions_field.py new file mode 100644 index 000000000..4cd0f1abb --- /dev/null +++ b/backend/experiment/migrations/0017_experiment_add_questions_field.py @@ -0,0 +1,26 @@ +# Generated by Django 3.2.20 on 2023-11-16 10:56 + +import django.contrib.postgres.fields +from django.db import migrations, models +import experiment.questions + + +class Migration(migrations.Migration): + + dependencies = [ + ('section', '0005_section_add_validator'), + ('experiment', '0016_add_social_media_fields'), + ] + + operations = [ + migrations.AddField( + model_name='experiment', + name='questions', + field=django.contrib.postgres.fields.ArrayField(base_field=models.TextField(choices=[('DEMOGRAPHICS', [('dgf_gender_identity', '(dgf_gender_identity) With which gender do you currently most identify?'), ('dgf_generation', '(dgf_generation) When were you born?'), ('dgf_country_of_origin', '(dgf_country_of_origin) In which country did you spend the most formative years of your childhood and youth?'), ('dgf_education', '(dgf_education) What is the highest educational qualification that you have attained?'), ('dgf_country_of_residence', '(dgf_country_of_residence) In which country do you currently reside?'), ('dgf_genre_preference', '(dgf_genre_preference) To which group of musical genres do you currently listen most?')]), ('EXTRA_DEMOGRAPHICS', [('dgf_age', '(dgf_age) What is your age?'), ('dgf_country_of_origin_open', '(dgf_country_of_origin_open) In which country did you spend the most formative years of your childhood and youth?'), ('dgf_country_of_residence_open', '(dgf_country_of_residence_open) In which country do you currently reside?'), ('dgf_native_language', '(dgf_native_language) What is your native language?'), ('dgf_highest_qualification_expectation', '(dgf_highest_qualification_expectation) If you are still in education, what is the highest qualification you expect to obtain?'), ('dgf_occupational_status', '(dgf_occupational_status) Occupational status'), ('dgf_gender_reduced', '(dgf_gender_reduced) What is your gender?'), ('dgf_musical_experience', '(dgf_musical_experience) Please select your level of musical experience:')]), ('MSI_F1_ACTIVE_ENGAGEMENT', [('msi_01_music_activities', '(msi_01_music_activities) I spend a lot of my free time doing music-related activities.'), ('msi_03_writing', '(msi_03_writing) I enjoy writing about music, for example on blogs and forums.'), ('msi_08_intrigued_styles', '(msi_08_intrigued_styles) I’m intrigued by musical styles I’m not familiar with and want to find out more.'), ('msi_15_internet_search_music', '(msi_15_internet_search_music) I often read or search the internet for things related to music.'), ('msi_21_spend_income', '(msi_21_spend_income) I don’t spend much of my disposable income on music.'), ('msi_24_music_addiction', '(msi_24_music_addiction) Music is kind of an addiction for me: I couldn’t live without it.'), ('msi_28_track_new', '(msi_28_track_new) I keep track of new music that I come across (e.g. new artists or recordings).'), ('msi_34_attended_events', '(msi_34_attended_events) I have attended _ live music events as an audience member in the past twelve months.'), ('msi_38_listen_music', '(msi_38_listen_music) I listen attentively to music for _ per day.')]), ('MSI_F2_PERCEPTUAL_ABILITIES', [('msi_05_good_singer', '(msi_05_good_singer) I am able to judge whether someone is a good singer or not.'), ('msi_06_song_first_time', '(msi_06_song_first_time) I usually know when I’m hearing a song for the first time.'), ('msi_11_spot_mistakes', '(msi_11_spot_mistakes) I find it difficult to spot mistakes in a performance of a song even if I know the tune.'), ('msi_12_performance_diff', '(msi_12_performance_diff) I can compare and discuss differences between two performances or versions of the same piece of music.'), ('msi_13_trouble_recognising', '(msi_13_trouble_recognising) I have trouble recognising a familiar song when played in a different way or by a different performer.'), ('msi_18_out_of_beat', '(msi_18_out_of_beat) I can tell when people sing or play out of time with the beat.'), ('msi_22_out_of_tune', '(msi_22_out_of_tune) I can tell when people sing or play out of tune.'), ('msi_23_no_idea_in_tune', '(msi_23_no_idea_in_tune) When I sing, I have no idea whether I’m in tune or not.'), ('msi_26_genre', '(msi_26_genre) When I hear a piece of music I can usually identify its genre.')]), ('MSI_F3_MUSICAL_TRAINING', [('msi_14_never_complimented', '(msi_14_never_complimented) I have never been complimented for my talents as a musical performer.'), ('msi_27_consider_musician', '(msi_27_consider_musician) I would not consider myself a musician.'), ('msi_32_practice_years', '(msi_32_practice_years) I engaged in regular, daily practice of a musical instrument (including voice) for _ years.'), ('msi_33_practice_daily', '(msi_33_practice_daily) At the peak of my interest, I practised my primary instrument for _ hours per day.'), ('msi_35_theory_training', '(msi_35_theory_training) I have had formal training in music theory for _ years.'), ('msi_36_instrumental_training', '(msi_36_instrumental_training) I have had _ years of formal training on a musical instrument (including voice) during my lifetime.'), ('msi_37_play_instruments', '(msi_37_play_instruments) How many musical instruments can you play?')]), ('MSI_F4_SINGING_ABILITIES', [('msi_04_sing_along', '(msi_04_sing_along) If somebody starts singing a song I don’t know, I can usually join in.'), ('msi_07_from_memory', '(msi_07_from_memory) I can sing or play music from memory.'), ('msi_10_sing_with_recording', '(msi_10_sing_with_recording) I am able to hit the right notes when I sing along with a recording.'), ('msi_17_not_sing_harmony', '(msi_17_not_sing_harmony) I am not able to sing in harmony when somebody is singing a familiar tune.'), ('msi_25_sing_public', '(msi_25_sing_public) I don’t like singing in public because I’m afraid that I would sing wrong notes.'), ('msi_29_sing_after_hearing', '(msi_29_sing_after_hearing) After hearing a new song two or three times, I can usually sing it by myself.'), ('msi_30_sing_back', '(msi_30_sing_back) I only need to hear a new tune once and I can sing it back hours later.')]), ('MSI_F5_EMOTIONS', [('msi_02_shivers', '(msi_02_shivers) I sometimes choose music that can trigger shivers down my spine.'), ('msi_09_rarely_emotions', '(msi_09_rarely_emotions) Pieces of music rarely evoke emotions for me.'), ('msi_16_motivate', '(msi_16_motivate) I often pick certain music to motivate or excite me.'), ('msi_19_identify_special', '(msi_19_identify_special) I am able to identify what is special about a given musical piece.'), ('msi_20_talk_emotions', '(msi_20_talk_emotions) I am able to talk about the emotions that a piece of music evokes for me.'), ('msi_31_memories', '(msi_31_memories) Music can evoke my memories of past people and places.')]), ('MSI_OTHER', [('msi_39_best_instrument', '(msi_39_best_instrument) The instrument I play best, including voice (or none), is:'), ('ST_01_age_instrument', '(ST_01_age_instrument) What age did you start to play an instrument?'), ('AP_01_absolute_pitch', "(AP_01_absolute_pitch) Do you have absolute pitch? Absolute or perfect pitch is the ability to recognise and name an isolated musical tone without a reference tone, e.g. being able to say 'F#' if someone plays that note on the piano.")]), ('LANGUAGE', [('lang_experience', '(lang_experience) Please rate your previous experience:'), ('lang_mother', '(lang_mother) What is your mother tongue?'), ('lang_second', '(lang_second) What is your second language, if applicable?'), ('lang_third', '(lang_third) What is your third language, if applicable?')]), ('MUSICGENS_17_W_VARIANTS', [('P01_1', '(P01_1) Can you clap in time with a musical beat?'), ('P01_2', '(P01_2) I can tap my foot in time with the beat of the music I hear.'), ('P01_3', '(P01_3) When listening to music, can you move in time with the beat?'), ('P02_1', '(P02_1) I can recognise a piece of music after hearing just a few notes.'), ('P02_2', '(P02_2) I can easily recognise a familiar song.'), ('P02_3', "(P02_3) When I hear the beginning of a song I know immediately whether I've heard it before or not."), ('P03_1', '(P03_1) I can tell when people sing out of tune.'), ('P03_2', '(P03_2) I am able to judge whether someone is a good singer or not.'), ('P03_3', '(P03_3) I find it difficult to spot mistakes in a performance of a song even if I know the tune.'), ('P04_1', '(P04_1) I feel chills when I hear music that I like.'), ('P04_2', '(P04_2) I get emotional listening to certain pieces of music.'), ('P04_3', '(P04_3) I become tearful or cry when I listen to a melody that I like very much.'), ('P04_4', '(P04_4) Music gives me shivers or goosebumps.'), ('P05_1', "(P05_1) When I listen to music I'm absorbed by it."), ('P05_2', '(P05_2) While listening to music, I become so involved that I forget about myself and my surroundings.'), ('P05_3', "(P05_3) When I listen to music I get so caught up in it that I don't notice anything."), ('P05_4', "(P05_4) I feel like I am 'one' with the music."), ('P05_5', '(P05_5) I lose myself in music.'), ('P06_1', '(P06_1) I like listening to music.'), ('P06_2', '(P06_2) I enjoy music.'), ('P06_3', '(P06_3) I listen to music for pleasure.'), ('P06_4', "(P06_4) Music is kind of an addiction for me - I couldn't live without it."), ('P07_1', '(P07_1) I can tell when people sing or play out of time with the beat of the music.'), ('P07_2', '(P07_2) I can hear when people are not in sync when they play a song.'), ('P07_3', '(P07_3) I can tell when music is sung or played in time with the beat.'), ('P08_1', '(P08_1) I can sing or play a song from memory.'), ('P08_2', '(P08_2) Singing or playing music from memory is easy for me.'), ('P08_3', '(P08_3) I find it hard to sing or play a song from memory.'), ('P09_1', "(P09_1) When I sing, I have no idea whether I'm in tune or not."), ('P09_2', '(P09_2) I am able to hit the right notes when I sing along with a recording.'), ('P09_3', '(P09_3) I can sing along with other people.'), ('P10_1', '(P10_1) I have no sense for rhythm (when I listen, play or dance to music).'), ('P10_2', '(P10_2) Understanding the rhythm of a piece is easy for me (when I listen, play or dance to music).'), ('P10_3', '(P10_3) I have a good sense of rhythm (when I listen, play, or dance to music).'), ('P11_1', "(P11_1) Do you have absolute pitch? Absolute pitch is the ability to recognise and name an isolated musical tone without a reference tone, e.g. being able to say 'F#' if someone plays that note on the piano."), ('P11_2', '(P11_2) Do you have perfect pitch?'), ('P11_3', "(P11_3) If someone plays a note on an instrument and you can't see what note it is, can you still name it (e.g. say that is a 'C' or an 'F')?"), ('P12_1', '(P12_1) Can you hear the difference between two melodies?'), ('P12_2', '(P12_2) I can recognise differences between melodies even if they are similar.'), ('P12_3', '(P12_3) I can tell when two melodies are the same or different.'), ('P13_1', '(P13_1) I make up new melodies in my mind.'), ('P13_2', "(P13_2) I make up songs, even when I'm just singing to myself."), ('P13_3', '(P13_3) I like to play around with new melodies that come to my mind.'), ('P14_1', '(P14_1) I have a melody stuck in my mind.'), ('P14_2', '(P14_2) I experience earworms.'), ('P14_3', '(P14_3) I get music stuck in my head.'), ('P14_4', '(P14_4) I have a piece of music stuck on repeat in my head.'), ('P15_1', '(P15_1) Music makes me dance.'), ('P15_2', "(P15_2) I don't like to dance, not even with music I like."), ('P15_3', '(P15_3) I can dance to a beat.'), ('P15_4', '(P15_4) I easily get into a groove when listening to music.'), ('P16_1', '(P16_1) Can you hear the difference between two rhythms?'), ('P16_2', '(P16_2) I can tell when two rhythms are the same or different.'), ('P16_3', '(P16_3) I can recognise differences between rhythms even if they are similar.'), ('P17_1', "(P17_1) I can't help humming or singing along to music that I like."), ('P17_2', "(P17_2) When I hear a tune I like a lot I can't help tapping or moving to its beat."), ('P17_3', '(P17_3) Hearing good music makes me want to sing along.')]), ('STOMP', [('stomp_alternative', '(stomp_alternative) How much do you like alternative music?'), ('stomp_blues', '(stomp_blues) How much do you like blues music?'), ('stomp_classical', '(stomp_classical) How much do you like classical music?'), ('stomp_country', '(stomp_country) How much do you like country music?'), ('stomp_dance', '(stomp_dance) How much do you like dance and electronic music?'), ('stomp_folk', '(stomp_folk) How much do you like folk music?'), ('stomp_funk', '(stomp_funk) How much do you like funk music?'), ('stomp_gospel', '(stomp_gospel) How much do you like gospel music?'), ('stomp_metal', '(stomp_metal) How much do you like heavy metal music?'), ('stomp_world', '(stomp_world) How much do you like world music?'), ('stomp_jazz', '(stomp_jazz) How much do you like jazz music?'), ('stomp_new_age', '(stomp_new_age) How much do you like new-age music?'), ('stomp_opera', '(stomp_opera) How much do you like opera music?'), ('stomp_pop', '(stomp_pop) How much do you like pop music?'), ('stomp_punk', '(stomp_punk) How much do you like punk music?'), ('stomp_rap', '(stomp_rap) How much do you like rap and hip-hop music?'), ('stomp_reggae', '(stomp_reggae) How much do you like reggae music?'), ('stomp_religious', '(stomp_religious) How much do you like religious music?'), ('stomp_rock', '(stomp_rock) How much do you like rock music?'), ('stomp_rnb', '(stomp_rnb) How much do you like soul and R&B music?'), ('stomp_bluegrass', '(stomp_bluegrass) How much do you like bluegrass music?'), ('stomp_oldies', '(stomp_oldies) How much do you like oldies music?'), ('stomp_soundtracks', '(stomp_soundtracks) How much do you like soundtracks and theme-song music?')]), ('TIPI', [('tipi_op', '(tipi_op) I see myself as open to new experiences and complex.'), ('tipi_on', '(tipi_on) I see myself as conventional and uncreative.'), ('tipi_cp', '(tipi_cp) I see myself as dependable and self-disciplined.'), ('tipi_cn', '(tipi_cn) I see myself as disorganised and careless.'), ('tipi_ep', '(tipi_ep) I see myself as extraverted and enthusiastic.'), ('tipi_en', '(tipi_en) I see myself as reserved and quiet.'), ('tipi_ap', '(tipi_ap) I see myself as sympathetic and warm.'), ('tipi_an', '(tipi_an) I see myself as critical and quarrelsome.'), ('tipi_np', '(tipi_np) I see myself as anxious and easily upset.'), ('tipi_nn', '(tipi_nn) I see myself as calm and emotionally stable.')]), ('OTHER', [('dgf_region_of_origin', '(dgf_region_of_origin) In which region did you spend the most formative years of your childhood and youth?'), ('dgf_region_of_residence', '(dgf_region_of_residence) In which region do you currently reside?'), ('dgf_gender_identity_zh', '(dgf_gender_identity_zh) 您目前对自己的性别认识?'), ('dgf_genre_preference_zh', '(dgf_genre_preference_zh) To which group of musical genres do you currently listen most?'), ('contact', '(contact) Contact (optional):')])]), blank=True, default=experiment.questions.get_default_question_keys, size=None), + ), + migrations.AlterField( + model_name='experiment', + name='playlists', + field=models.ManyToManyField(blank=True, to='section.Playlist'), + ), + ] diff --git a/backend/experiment/migrations/0018_set_default_question_data.py b/backend/experiment/migrations/0018_set_default_question_data.py new file mode 100644 index 000000000..5c1c33fb2 --- /dev/null +++ b/backend/experiment/migrations/0018_set_default_question_data.py @@ -0,0 +1,21 @@ +from django.db import migrations +from experiment.rules import EXPERIMENT_RULES + +def set_default_question_data(apps, schema_editor): + + Experiment = apps.get_model("experiment", "Experiment") + + for experiment in Experiment.objects.all(): + experiment.questions = [q.key for q in EXPERIMENT_RULES[experiment.rules]().questions] + experiment.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('experiment', '0017_experiment_add_questions_field'), + ] + + operations = [ + migrations.RunPython(set_default_question_data, reverse_code=migrations.RunPython.noop), + ] diff --git a/backend/experiment/models.py b/backend/experiment/models.py index c6fb10b37..0812485ba 100644 --- a/backend/experiment/models.py +++ b/backend/experiment/models.py @@ -5,6 +5,10 @@ from experiment.rules import EXPERIMENT_RULES from experiment.standards.iso_languages import ISO_LANGUAGES +from django.contrib.postgres.fields import ArrayField +from .questions import QUESTIONS_CHOICES, get_default_question_keys +from django import forms + language_choices = [(key, ISO_LANGUAGES[key]) for key in ISO_LANGUAGES.keys()] language_choices[0] = ('', 'Unset') @@ -36,6 +40,11 @@ class Experiment(models.Model): default="", blank=True, choices=language_choices, max_length=2) experiment_series = models.ForeignKey(ExperimentSeries, on_delete=models.SET_NULL, blank=True, null=True) + questions = ArrayField( + models.TextField(choices=QUESTIONS_CHOICES), + blank=True, + default=get_default_question_keys + ) class Meta: ordering = ['name'] @@ -189,4 +198,4 @@ def max_score(self): class Feedback(models.Model): text = models.TextField() - experiment = models.ForeignKey(Experiment, on_delete=models.CASCADE) \ No newline at end of file + experiment = models.ForeignKey(Experiment, on_delete=models.CASCADE) diff --git a/backend/experiment/questions/__init__.py b/backend/experiment/questions/__init__.py index e69de29bb..c6133a85e 100644 --- a/backend/experiment/questions/__init__.py +++ b/backend/experiment/questions/__init__.py @@ -0,0 +1,40 @@ +from .demographics import DEMOGRAPHICS, EXTRA_DEMOGRAPHICS +from .goldsmiths import MSI_F1_ACTIVE_ENGAGEMENT, MSI_F2_PERCEPTUAL_ABILITIES, MSI_F3_MUSICAL_TRAINING, MSI_F4_SINGING_ABILITIES, MSI_F5_EMOTIONS, MSI_OTHER +from .languages import LANGUAGE +from .musicgens import MUSICGENS_17_W_VARIANTS +from .stomp import STOMP +from .tipi import TIPI +from .other import OTHER + +# Label of the group as it will apear in the admin +QUESTION_GROUPS = [ ("DEMOGRAPHICS",DEMOGRAPHICS), + ("EXTRA_DEMOGRAPHICS",EXTRA_DEMOGRAPHICS), + ("MSI_F1_ACTIVE_ENGAGEMENT",MSI_F1_ACTIVE_ENGAGEMENT), + ("MSI_F2_PERCEPTUAL_ABILITIES",MSI_F2_PERCEPTUAL_ABILITIES), + ("MSI_F3_MUSICAL_TRAINING",MSI_F3_MUSICAL_TRAINING), + ("MSI_F4_SINGING_ABILITIES",MSI_F4_SINGING_ABILITIES), + ("MSI_F5_EMOTIONS",MSI_F5_EMOTIONS), + ("MSI_OTHER",MSI_OTHER), + ("LANGUAGE",LANGUAGE), + ("MUSICGENS_17_W_VARIANTS",MUSICGENS_17_W_VARIANTS), + ("STOMP",STOMP), + ("TIPI",TIPI), + ("OTHER",OTHER) +] + +QUESTIONS_ALL = [] +KEYS_ALL = [] +QUESTIONS_CHOICES = [] + +for question_group in QUESTION_GROUPS: + QUESTIONS_ALL.extend(question_group[1]) + KEYS_ALL.extend([question.key for question in question_group[1]]) + QUESTIONS_CHOICES.append( (question_group[0], [(q.key,"("+q.key+") "+q.question) for q in question_group[1]]) ) + +def get_default_question_keys(): + return [q.key for q in DEMOGRAPHICS] + + +def get_questions_from_keys(keys): + """ Returns questions in the order of keys""" + return [QUESTIONS_ALL[KEYS_ALL.index(key)] for key in keys] diff --git a/backend/experiment/questions/demographics.py b/backend/experiment/questions/demographics.py index eb3987002..ad8fd11f5 100644 --- a/backend/experiment/questions/demographics.py +++ b/backend/experiment/questions/demographics.py @@ -74,13 +74,6 @@ 'contemporary': _("Hip-hop/R&B/Funk") } ), - # msi_39_best_instrument duplicate in goldsmiths.py - TextQuestion( - key='msi_39_best_instrument', - view='STRING', - question=_("The instrument I play best, including voice (or none), is:") - ), - ] diff --git a/backend/experiment/questions/other.py b/backend/experiment/questions/other.py new file mode 100644 index 000000000..1d9217b41 --- /dev/null +++ b/backend/experiment/questions/other.py @@ -0,0 +1,73 @@ +from experiment.actions.form import Question, ChoiceQuestion +from django.utils.translation import gettext_lazy as _ + + +region_choices = { + 'HD': '华东(山东、江苏、安徽、浙江、福建、江西、上海)', + 'HN': '华南(广东、广西、海南)', + 'HZ': '华中(湖北、湖南、河南、江西)', + 'HB': '华北(北京、天津、河北、山西、内蒙古)', + 'XB': '西北(宁夏、新疆、青海、陕西、甘肃)', + 'XN': '西南(四川、云南、贵州、西藏、重庆)', + 'DB': '东北(辽宁、吉林、黑龙江)', + 'GAT': '港澳台(香港、澳门、台湾)', + 'QT': '国外', + 'no_answer': '不想回答' +} + +OTHER = [ + + ChoiceQuestion( + key='dgf_region_of_origin', + view='DROPDOWN', + question=_( + "In which region did you spend the most formative years of your childhood and youth?"), + choices=region_choices, + ), + + ChoiceQuestion( + view='DROPDOWN', + key='dgf_region_of_residence', + question=_("In which region do you currently reside?"), + choices=region_choices, + ), + + ChoiceQuestion( + key='dgf_gender_identity_zh', + view='RADIOS', + question="您目前对自己的性别认识?", + choices={ + 'male': "男", + 'Female': "女", + 'Others': "其他", + 'no_answer': "不想回答" + } + ), + + ChoiceQuestion( + view='DROPDOWN', + key='dgf_genre_preference_zh', + question=_( + "To which group of musical genres do you currently listen most?"), + choices={ + 'unpretentious': _("Pop/Country/Religious"), + 'Chinese artistic': _("Folk/Mountain songs"), + 'sophisticated': _("Western classical music/Jazz/Opera/Musical"), + 'classical': _("Chinese opera"), + 'intense': _("Rock/Punk/Metal"), + 'mellow': _("Dance/Electronic/New Age"), + 'contemporary': _("Hip-hop/R&B/Funk"), + } + ), + + Question( + key='contact', + explainer=_( + "Thank you so much for your feedback! Feel free to include your contact information if you would like a reply or skip if you wish to remain anonymous." + ), + question=_( + "Contact (optional):" + ), + is_skippable=True + ) +] \ No newline at end of file diff --git a/backend/experiment/rules/base.py b/backend/experiment/rules/base.py index aa06d648e..f02f1d15d 100644 --- a/backend/experiment/rules/base.py +++ b/backend/experiment/rules/base.py @@ -6,9 +6,11 @@ from experiment.actions import Final, Form, Trial from experiment.questions.demographics import DEMOGRAPHICS -from experiment.questions.utils import unanswered_questions +from experiment.questions.goldsmiths import MSI_OTHER +from experiment.questions.utils import question_by_key, unanswered_questions from result.score import SCORING_RULES +from experiment.questions import get_questions_from_keys logger = logging.getLogger(__name__) @@ -16,9 +18,9 @@ class Base(object): """Base class for other rules classes""" contact_email = settings.CONTACT_MAIL - + def __init__(self): - self.questions = DEMOGRAPHICS + self.questions = DEMOGRAPHICS + [question_by_key('msi_39_best_instrument', MSI_OTHER)] def feedback_info(self): feedback_body = render_to_string('feedback/user_feedback.html', {'email': self.contact_email}) @@ -113,8 +115,9 @@ def get_single_question(self, session, randomize=False): def get_questionnaire(self, session, randomize=False, cutoff_index=None): ''' Get a list of questions to be asked in succession ''' + trials = [] - questions = list(unanswered_questions(session.participant, self.questions, randomize, cutoff_index)) + questions = list(unanswered_questions(session.participant, get_questions_from_keys(session.experiment.questions), randomize, cutoff_index)) open_questions = len(questions) if not open_questions: return None diff --git a/backend/experiment/rules/categorization.py b/backend/experiment/rules/categorization.py index 1926ab9d5..ca248efb7 100644 --- a/backend/experiment/rules/categorization.py +++ b/backend/experiment/rules/categorization.py @@ -354,7 +354,6 @@ def plan_experiment(self, session): def plan_phase(self, session): json_data = session.load_json_data() - print(json_data['group'], session.playlist.section_set.first().tag) if 'training' in json_data['phase']: # Retrieve training stimuli for the assigned group if json_data["group"] == 'S1': @@ -385,7 +384,6 @@ def plan_phase(self, session): section_sequence.append(sections[0].song_id) section_sequence.append(sections[1].song_id) random.shuffle(section_sequence) - print(section_sequence) json_data['sequence'] = section_sequence else: diff --git a/backend/experiment/rules/hooked.py b/backend/experiment/rules/hooked.py index 1b8a991a0..f83c9f6d3 100644 --- a/backend/experiment/rules/hooked.py +++ b/backend/experiment/rules/hooked.py @@ -12,6 +12,8 @@ from experiment.actions.form import BooleanQuestion, Form from experiment.actions.playback import Playback from experiment.questions.demographics import DEMOGRAPHICS +from experiment.questions.goldsmiths import MSI_OTHER +from experiment.questions.utils import question_by_key from experiment.questions.utils import copy_shuffle from experiment.questions.goldsmiths import MSI_FG_GENERAL, MSI_ALL from experiment.questions.stomp import STOMP20 @@ -33,6 +35,7 @@ class Hooked(Base): def __init__(self): self.questions = [ *copy_shuffle(DEMOGRAPHICS), # 1. Demographic questions (7 questions) + question_by_key('msi_39_best_instrument', MSI_OTHER), *copy_shuffle(MSI_FG_GENERAL), # 2. General music sophistication *copy_shuffle(MSI_ALL), # 3. Complete music sophistication (20 questions) *copy_shuffle(STOMP20), # 4. STOMP (20 questions) diff --git a/backend/experiment/rules/huang_2022.py b/backend/experiment/rules/huang_2022.py index cc2d2a86e..75518cac2 100644 --- a/backend/experiment/rules/huang_2022.py +++ b/backend/experiment/rules/huang_2022.py @@ -8,7 +8,8 @@ from experiment.actions.form import BooleanQuestion, ChoiceQuestion, Form, Question from experiment.actions.playback import Playback from experiment.questions.demographics import EXTRA_DEMOGRAPHICS -from experiment.questions.goldsmiths import MSI_ALL +from experiment.questions.goldsmiths import MSI_ALL, MSI_OTHER +from experiment.questions.other import OTHER from experiment.questions.utils import question_by_key from experiment.actions.styles import STYLE_BOOLEAN_NEGATIVE_FIRST from result.utils import prepare_result @@ -16,80 +17,6 @@ logger = logging.getLogger(__name__) -region_choices = { - 'HD': '华东(山东、江苏、安徽、浙江、福建、江西、上海)', - 'HN': '华南(广东、广西、海南)', - 'HZ': '华中(湖北、湖南、河南、江西)', - 'HB': '华北(北京、天津、河北、山西、内蒙古)', - 'XB': '西北(宁夏、新疆、青海、陕西、甘肃)', - 'XN': '西南(四川、云南、贵州、西藏、重庆)', - 'DB': '东北(辽宁、吉林、黑龙江)', - 'GAT': '港澳台(香港、澳门、台湾)', - 'QT': '国外', - 'no_answer': '不想回答' -} - - -def origin_question(): - return ChoiceQuestion( - key='dgf_region_of_origin', - view='DROPDOWN', - question=_( - "In which region did you spend the most formative years of your childhood and youth?"), - choices=region_choices, - ) - - -def residence_question(): - return ChoiceQuestion( - view='DROPDOWN', - key='dgf_region_of_residence', - question=_("In which region do you currently reside?"), - choices=region_choices, - ) - - -def gender_question(): - return ChoiceQuestion( - key='dgf_gender_identity', - view='RADIOS', - question="您目前对自己的性别认识?", - choices={ - 'male': "男", - 'Female': "女", - 'Others': "其他", - 'no_answer': "不想回答" - } - ) - -def genre_question(): - return ChoiceQuestion( - view='DROPDOWN', - key='dgf_genre_preference', - question=_( - "To which group of musical genres do you currently listen most?"), - choices={ - 'unpretentious': _("Pop/Country/Religious"), - 'Chinese artistic': _("Folk/Mountain songs"), - 'sophisticated': _("Western classical music/Jazz/Opera/Musical"), - 'classical': _("Chinese opera"), - 'intense': _("Rock/Punk/Metal"), - 'mellow': _("Dance/Electronic/New Age"), - 'contemporary': _("Hip-hop/R&B/Funk"), - } - ) - -def contact_question(): - return Question( - key='contact', - explainer=_( - "Thank you so much for your feedback! Feel free to include your contact information if you would like a reply or skip if you wish to remain anonymous." - ), - question=_( - "Contact (optional):" - ), - is_skippable=True - ) class Huang2022(Hooked): """Rules for the Chinese version of the Hooked experiment.""" @@ -102,17 +29,17 @@ class Huang2022(Hooked): def __init__(self): self.questions = MSI_ALL + [ - question_by_key('msi_39_best_instrument'), - genre_question(), + question_by_key('msi_39_best_instrument', MSI_OTHER), + question_by_key('dgf_genre_preference_zh', OTHER), question_by_key('dgf_generation'), question_by_key('dgf_education', drop_choices=['isced-5']), question_by_key( 'dgf_highest_qualification_expectation', EXTRA_DEMOGRAPHICS), question_by_key('dgf_occupational_status', EXTRA_DEMOGRAPHICS), - origin_question(), - residence_question(), - gender_question(), - contact_question() + question_by_key('dgf_region_of_origin', OTHER), + question_by_key('dgf_region_of_residence', OTHER), + question_by_key('dgf_gender_identity_zh', OTHER), + question_by_key('contact', OTHER), ] def first_round(self, experiment): diff --git a/backend/experiment/rules/musical_preferences.py b/backend/experiment/rules/musical_preferences.py index cf6ded0f6..dbf86fbd4 100644 --- a/backend/experiment/rules/musical_preferences.py +++ b/backend/experiment/rules/musical_preferences.py @@ -6,6 +6,7 @@ from experiment.questions.utils import question_by_key from experiment.questions.demographics import EXTRA_DEMOGRAPHICS from experiment.questions.goldsmiths import MSI_F1_ACTIVE_ENGAGEMENT +from experiment.questions.other import OTHER from experiment.actions import Consent, Explainer, Final, HTML, Playlist, Redirect, Step, StartSession, Trial from experiment.actions.form import BooleanQuestion, ChoiceQuestion, Form, LikertQuestionIcon @@ -18,7 +19,7 @@ from section.models import Section from .base import Base -from .huang_2022 import gender_question, genre_question, get_test_playback, origin_question, residence_question +from .huang_2022 import get_test_playback class MusicalPreferences(Base): @@ -36,11 +37,11 @@ class MusicalPreferences(Base): def __init__(self): self.questions = [ question_by_key('msi_38_listen_music', MSI_F1_ACTIVE_ENGAGEMENT), - genre_question(), - gender_question(), + question_by_key('dgf_genre_preference_zh', OTHER), + question_by_key('dgf_gender_identity_zh', OTHER), question_by_key('dgf_age', EXTRA_DEMOGRAPHICS), - origin_question(), - residence_question() + question_by_key('dgf_region_of_origin', OTHER), + question_by_key('dgf_region_of_residence', OTHER) ] def first_round(self, experiment): diff --git a/backend/experiment/tests/test_admin_experiment.py b/backend/experiment/tests/test_admin_experiment.py index 2446bb027..0ca0baef6 100644 --- a/backend/experiment/tests/test_admin_experiment.py +++ b/backend/experiment/tests/test_admin_experiment.py @@ -8,7 +8,7 @@ from session.models import Session # Expected field count per model -EXPECTED_EXPERIMENT_FIELDS = 12 +EXPECTED_EXPERIMENT_FIELDS = 13 EXPECTED_SESSION_FIELDS = 9 EXPECTED_RESULT_FIELDS = 12 EXPECTED_PARTICIPANT_FIELDS = 5 diff --git a/backend/section/models.py b/backend/section/models.py index 4151419ab..813182a68 100644 --- a/backend/section/models.py +++ b/backend/section/models.py @@ -206,7 +206,6 @@ def update_admin_csv(self): section.tag, section.group]) csv_string = csvfile.csv_string - print(csv_string) return ''.join(csv_string) class Song(models.Model): From 9e6fcfc2ff3568bf1ef45a7c50a2cbac9b68183a Mon Sep 17 00:00:00 2001 From: albertas-jn <24507839+albertas-jn@users.noreply.github.com> Date: Thu, 16 Nov 2023 13:02:52 +0100 Subject: [PATCH 18/21] Check for duplicate question keys --- backend/experiment/questions/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/backend/experiment/questions/__init__.py b/backend/experiment/questions/__init__.py index c6133a85e..4058bc3d6 100644 --- a/backend/experiment/questions/__init__.py +++ b/backend/experiment/questions/__init__.py @@ -38,3 +38,6 @@ def get_default_question_keys(): def get_questions_from_keys(keys): """ Returns questions in the order of keys""" return [QUESTIONS_ALL[KEYS_ALL.index(key)] for key in keys] + +if len(KEYS_ALL) != len(set(KEYS_ALL)): + raise Exception("Duplicate question keys") From e0852a2c75684783cc3de29989f9a7288d599f78 Mon Sep 17 00:00:00 2001 From: BeritJanssen Date: Mon, 20 Nov 2023 14:20:04 +0100 Subject: [PATCH 19/21] update mpref texts, correct sampling of sections --- .../experiment/rules/musical_preferences.py | 14 +- .../consent/consent_musical_preferences.html | 27 +-- .../templates/final/musical_preferences.html | 20 -- backend/locale/zh/LC_MESSAGES/django.mo | Bin 65891 -> 66125 bytes backend/locale/zh/LC_MESSAGES/django.po | 190 ++++++++++-------- 5 files changed, 125 insertions(+), 126 deletions(-) delete mode 100644 backend/experiment/templates/final/musical_preferences.html diff --git a/backend/experiment/rules/musical_preferences.py b/backend/experiment/rules/musical_preferences.py index e34309136..b71978cee 100644 --- a/backend/experiment/rules/musical_preferences.py +++ b/backend/experiment/rules/musical_preferences.py @@ -27,6 +27,7 @@ class MusicalPreferences(Base): preference_offset = 20 knowledge_offset = 42 round_increment = 1 + contact_email = 'musicexp_china@163.com' know_score = { 'yes': 2, @@ -48,7 +49,7 @@ def first_round(self, experiment): rendered = render_to_string('consent/{}'.format(self.consent_file) ) consent = Consent( - text=rendered, title=_('Informed consent'), confirm=_('I agree'), deny=_('Stop') + text=rendered, title=_('Informed consent'), confirm=_('I consent and continue.'), deny=_('I do not consent.') ) playlist = Playlist(experiment.playlists.all()) explainer = Explainer( @@ -182,11 +183,11 @@ def next_round(self, session, request_session=None): session, top_participant, known_songs, - n_songs, + n_songs-1, top_all )] - section = session.playlist.random_section() + section = session.section_from_unused_song() like_key = 'like_song' likert = LikertQuestionIcon( question=_('2. How much do you like this song?'), @@ -232,7 +233,7 @@ def social_media_info(self, experiment, top_participant, known_songs, n_songs, t ) format_songs = lambda songs: ', '.join([song['name'] for song in songs]) return { - 'apps': ['facebook', 'twitter'], + 'apps': ['weibo', 'share'], 'message': _("I explored musical preferences on %(url)s! My top 3 favorite songs: %(top_participant)s. I know %(known_songs)i out of %(n_songs)i songs. All players' top 3 songs: %(top_all)s") % { 'url': current_url, 'top_participant': format_songs(top_participant), @@ -262,6 +263,11 @@ def get_final_view(self, session, top_participant, known_songs, n_songs, top_all social=social_info ) return view + + def feedback_info(self): + info = super().feedback_info() + info['header'] = _("Any remarks or questions (optional):") + return info def get_preferred_songs(self, result_set, n=5): top_songs = result_set.values('section').annotate( diff --git a/backend/experiment/templates/consent/consent_musical_preferences.html b/backend/experiment/templates/consent/consent_musical_preferences.html index 702439067..a9852021a 100644 --- a/backend/experiment/templates/consent/consent_musical_preferences.html +++ b/backend/experiment/templates/consent/consent_musical_preferences.html @@ -2,7 +2,7 @@

{% translate "Dear participant," %}

{% blocktranslate %} -You will be taking part in the Musical Preferences research project conducted by Xuan Huang under the supervision of Prof. Henkjan Honing and Dr. John Ashley Burgoyne of the Music Cognition Group at the University of Amsterdam’s Institute for Logic, Language, and Computation. +You will be taking part in the Musical Preferences research project conducted by Xuan Huang under the supervision of Prof. Henkjan Honing and Dr. John Ashley Burgoyne of the Music Cognition Group at the University of Amsterdam’s Institute for Logic, Language, and Computation. {% endblocktranslate %}

@@ -10,45 +10,46 @@

{% translate "Purpose of the research project" %}

{% blocktranslate %} -Studies have shown that cultural preferences and familiarity for music start in infancy and continue throughout adolescence and adulthood. People tend to prefer music from their own cultural traditions. This research will help us understand individual and situational influences on musical preferences and investigate the factors that underly musical preferences in China. For example, do people who have preferences for classical music also have preferences for Chinese traditional music? Are there cultural-specific or universal structural features for musical preferences? +Studies have shown that cultural preferences and familiarity for music start in infancy and continue throughout adolescence and adulthood. People tend to prefer music from their own cultural traditions. This research will help us understand individual and situational influences on musical preferences and investigate the factors that underly musical preferences in China. For example, do people who have preferences for classical music also have preferences for Chinese traditional music? Are there cultural-specific or universal structural features for musical preferences? {% endblocktranslate %}

{% load i18n %} -

{% translate "Who can take part in this research?" %}

+

{% translate "Who can take part?" %}

- {% blocktranslate %} - Anybody with sufficiently good hearing, natural or corrected, to enjoy music listening is welcome to participate in this research. Your device must be able to play audio, and you must have a sufficiently strong data connection to be able to stream short MP3 files. Headphones are recommended for the best results, but you may also use either internal or external loudspeakers. You should adjust the volume of your device so that it is comfortable for you. - {% endblocktranslate %} +

    +
  1. {% translate "Legally competent participants aged 16 or older." %}
  2. +
  3. {% translate "Anybody with sufficient good hearing, natural or corrected, to enjoy music listening is welcome to participate in this research." %}
  4. +

{% translate "Instructions" %}

{% blocktranslate %} -This study is a music preference experiment in which you will hear 64 music clips throughout the experiment, you either wear headphones or use your device's speakers to listen to the clips. Adjust the volume level of your device before the experiment begins. +This study is a music preference experiment in which you will hear 64 music clips throughout the experiment, you either wear headphones or use your device's speakers to listen to the clips. Adjust the volume level of your device before the experiment begins. {% endblocktranslate %}

{% blocktranslate %} -The experiment has two parts. The first part is a questionnaire with 6 questions. The second part is a music preference test, where you will listen to a music clip and answer questions about it. The results of your music preferences will be available after the experiment is completed. +The experiment has two parts. The first part is a questionnaire with 6 questions. The second part is a music preference test, where you will listen to a music clip and answer questions about it. The results of your music preferences will be available after the experiment is completed. {% endblocktranslate %}

-

{% translate "Voluntary participation" %}

+

{% translate "Voluntary participation & risks" %}

{% blocktranslate %} -You will be participating in this research project on a voluntary basis. This means you are free to stop taking part at any stage without consequences or penalty. If you decide to stop or withdraw your consent, all the information gathered up until then will be permanently deleted. +You will be participating in this research on a voluntary basis. This means you are free to stop taking part at any stage without consequences or penalty. If you decide to stop or withdraw your consent, all the information gathered up until then will be permanently deleted. This research has no known risks. {% endblocktranslate %}

-

{% translate "Confidential treatment of your details" %}

+

{% translate "Privacy" %}

{% blocktranslate %} -The information gathered over the course of this research will be used for further analysis and publication in scientific journals only. Fully anonymised data collected during the experiment may be made available online in tandem with these scientific publications. We guarantee that you will remain anonymous under all circumstances. Your personal details will not be viewed by third parties without your express permission. +The information gathered will be used for publication in scientific journals only. Fully anonymized data may be available online in tandem with these scientific publications. We guarantee that you will remain anonymous under all circumstances. Your personal information will not be viewed by third parties without your express permission. {% endblocktranslate %}

@@ -56,7 +57,7 @@

{% translate "Confidential treatment of your details" %}

{% translate "Further Information" %}

- {% blocktranslate %} For further information, please contact Xuan Huang (x.huang@uva.nl) or Dr. John Ashley Burgoyne (j.a.burgoyne@uva.nl). If you have any complaints regarding this project, you can contact the Secretary of the Ethics Committee of the Faculty of Humanities of the University of Amsterdam (commissie-ethiek-fgw@uva.nl). + {% blocktranslate %} For further information, please contact Xuan Huang (x.huang@uva.nl) or Dr. John Ashley Burgoyne (j.a.burgoyne@uva.nl). If you have any complaints regarding this project, you can contact the Secretary of the Ethics Committee of the Faculty of Humanities of the University of Amsterdam (commissie-ethiek-fgw@uva.nl). {% endblocktranslate %}

diff --git a/backend/experiment/templates/final/musical_preferences.html b/backend/experiment/templates/final/musical_preferences.html deleted file mode 100644 index 434ba1694..000000000 --- a/backend/experiment/templates/final/musical_preferences.html +++ /dev/null @@ -1,20 +0,0 @@ -{% load i18n %} -

{% translate "Thank you for your participation and contribution to science!" %}

-
-
-

{% translate "Your Top 5 favorite songs:" %}

-
    - {% for song in top_participant %} -
  • {{song.name}} - {{song.score}} points
  • - {% endfor %} -
-
-
-

{% translate "Top 5 favorite songs:" %}

-
    - {% for song in top_all %} -
  • {{song.name}} - {{song.score}} points
  • - {% endfor %} -
-
-
\ No newline at end of file diff --git a/backend/locale/zh/LC_MESSAGES/django.mo b/backend/locale/zh/LC_MESSAGES/django.mo index bab1a29dbc829c65dd9319b51d900da4dd95bff9..af67e9e85d74b7121c3eb37689efcce85a9de99a 100644 GIT binary patch delta 8318 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 AEdT%j diff --git a/backend/locale/zh/LC_MESSAGES/django.po b/backend/locale/zh/LC_MESSAGES/django.po index 6ec17c091..52bd069e9 100755 --- a/backend/locale/zh/LC_MESSAGES/django.po +++ b/backend/locale/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-11-13 15:36+0100\n" +"POT-Creation-Date: 2023-11-20 14:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -65,14 +65,14 @@ msgstr "实验结束" #: experiment/actions/form.py:67 experiment/actions/song_sync.py:51 #: experiment/rules/eurovision_2020.py:159 experiment/rules/hooked.py:321 #: experiment/rules/huang_2022.py:160 experiment/rules/kuiper_2020.py:150 -#: experiment/rules/musical_preferences.py:131 +#: experiment/rules/musical_preferences.py:132 msgid "Yes" msgstr "是" #: experiment/actions/form.py:68 experiment/actions/song_sync.py:52 #: experiment/rules/eurovision_2020.py:158 experiment/rules/hooked.py:320 #: experiment/rules/huang_2022.py:160 experiment/rules/kuiper_2020.py:149 -#: experiment/rules/musical_preferences.py:131 +#: experiment/rules/musical_preferences.py:132 msgid "No" msgstr "否" @@ -137,7 +137,7 @@ msgstr "请选择一个曲库" msgid "Total Score" msgstr "总得分" -#: experiment/actions/score.py:42 experiment/rules/musical_preferences.py:112 +#: experiment/actions/score.py:42 experiment/rules/musical_preferences.py:113 msgid "Next" msgstr "下一首" @@ -179,9 +179,9 @@ msgid "Get ready!" msgstr "准备" #: experiment/actions/utils.py:21 experiment/actions/utils.py:31 -#: experiment/rules/musical_preferences.py:259 +#: experiment/rules/musical_preferences.py:260 msgid "End" -msgstr "" +msgstr "完成" #: experiment/questions/demographics.py:10 msgid "Have not (yet) completed any school qualification" @@ -854,7 +854,7 @@ msgstr "提交" msgid "We appreciate your feedback!" msgstr "" -#: experiment/rules/base.py:109 experiment/rules/musical_preferences.py:80 +#: experiment/rules/base.py:109 experiment/rules/musical_preferences.py:81 msgid "Questionnaire" msgstr "问卷调查" @@ -926,7 +926,7 @@ msgid "" msgstr "" #: experiment/rules/beat_alignment.py:91 -#: experiment/rules/musical_preferences.py:102 +#: experiment/rules/musical_preferences.py:103 #: experiment/rules/speech2song.py:48 experiment/rules/util/practice.py:112 msgid "Start" msgstr "开始" @@ -1233,25 +1233,24 @@ msgstr "当您再次听到声音时,您需要判断出此音乐与您脑海中 #: experiment/rules/hooked.py:57 experiment/rules/huang_2022.py:206 #: experiment/rules/huang_2022.py:257 -#: experiment/rules/musical_preferences.py:88 +#: experiment/rules/musical_preferences.py:89 msgid "Let's go!" msgstr "开始吧!" #: experiment/rules/hooked.py:62 experiment/rules/huang_2022.py:124 #: experiment/rules/matching_pairs.py:32 -#: experiment/rules/musical_preferences.py:51 +#: experiment/rules/musical_preferences.py:52 #: experiment/rules/rhythm_experiment_series.py:45 #: experiment/rules/speech2song.py:55 #: experiment/templates/consent/consent_categorization.html:15 #: experiment/templates/consent/consent_hooked.html:79 #: experiment/templates/consent/consent_huang2021.html:88 -#: experiment/templates/consent/consent_musical_preferences.html:63 +#: experiment/templates/consent/consent_musical_preferences.html:64 msgid "Informed consent" msgstr "知情同意声书" #: experiment/rules/hooked.py:62 experiment/rules/huang_2022.py:124 #: experiment/rules/matching_pairs.py:32 -#: experiment/rules/musical_preferences.py:51 #: experiment/rules/rhythm_experiment_series.py:45 #: experiment/rules/speech2song.py:55 msgid "I agree" @@ -1259,7 +1258,6 @@ msgstr "同意" #: experiment/rules/hooked.py:62 experiment/rules/huang_2022.py:124 #: experiment/rules/matching_pairs.py:32 -#: experiment/rules/musical_preferences.py:51 #: experiment/rules/rhythm_experiment_series.py:45 #: experiment/rules/speech2song.py:55 msgid "Stop" @@ -1318,25 +1316,26 @@ msgid "Contact (optional):" msgstr "微信号、手机、邮箱等(选填):" #: experiment/rules/huang_2022.py:137 +#: experiment/rules/musical_preferences.py:269 msgid "Any remarks or questions (optional):" -msgstr "请写下您的意见或建议:" +msgstr "建议或意见反馈,如技术问题(选填):" #: experiment/rules/huang_2022.py:138 msgid "Thank you for your feedback!" msgstr "感谢您的反馈!" #: experiment/rules/huang_2022.py:157 -#: experiment/rules/musical_preferences.py:128 +#: experiment/rules/musical_preferences.py:129 msgid "Do you hear the music?" msgstr "您听到音乐了吗?" #: experiment/rules/huang_2022.py:167 -#: experiment/rules/musical_preferences.py:138 +#: experiment/rules/musical_preferences.py:139 msgid "Audio check" msgstr "音频测试" #: experiment/rules/huang_2022.py:176 -#: experiment/rules/musical_preferences.py:112 +#: experiment/rules/musical_preferences.py:113 msgid "Quit" msgstr "退出" @@ -1489,7 +1488,7 @@ msgid "" msgstr "" #: experiment/rules/listening_conditions.py:113 -#: experiment/rules/musical_preferences.py:59 +#: experiment/rules/musical_preferences.py:60 #: experiment/rules/speech2song.py:94 msgid "OK" msgstr "好" @@ -1529,15 +1528,23 @@ msgstr "" msgid "Enter a name to enter the ICMPC hall of fame" msgstr "" -#: experiment/rules/musical_preferences.py:55 +#: experiment/rules/musical_preferences.py:52 +msgid "I consent and continue." +msgstr "同意" + +#: experiment/rules/musical_preferences.py:52 +msgid "I do not consent." +msgstr "退出" + +#: experiment/rules/musical_preferences.py:56 msgid "Welcome to the Musical Preferences experiment!" msgstr "欢迎参加音乐偏好实验!" -#: experiment/rules/musical_preferences.py:57 +#: experiment/rules/musical_preferences.py:58 msgid "Please start by checking your connection quality." msgstr "请先检查您的网络连接质量。" -#: experiment/rules/musical_preferences.py:83 +#: experiment/rules/musical_preferences.py:84 msgid "" "To understand your musical preferences, we have {} questions for you before " "the experiment begins. The first two " @@ -1548,74 +1555,73 @@ msgstr "" "为了了解您的音乐偏好,在实验开始前请您回答{}个问题。前两个问题是关于您的音乐" "聆听经验,其他四个问题是人口统计学问题。答题需要2-3分钟左右。" -#: experiment/rules/musical_preferences.py:86 -#: experiment/rules/musical_preferences.py:100 +#: experiment/rules/musical_preferences.py:87 +#: experiment/rules/musical_preferences.py:101 msgid "Have fun!" msgstr "祝答题愉快!" -#: experiment/rules/musical_preferences.py:94 +#: experiment/rules/musical_preferences.py:95 msgid "How to play" msgstr "实验介绍" -#: experiment/rules/musical_preferences.py:96 +#: experiment/rules/musical_preferences.py:97 msgid "" "You will hear 64 music clips and have to answer two questions for each clip." msgstr "在整个实验过程中,你将听到64个音乐片段并回答与之相关的问题。" -#: experiment/rules/musical_preferences.py:97 +#: experiment/rules/musical_preferences.py:98 msgid "It will take 20-30 minutes to complete the whole experiment." msgstr "整个实验需要20至30分钟。" -#: experiment/rules/musical_preferences.py:98 +#: experiment/rules/musical_preferences.py:99 msgid "Either wear headphones or use your device's speakers." msgstr "请佩戴耳机或使用设备扬声器。" -#: experiment/rules/musical_preferences.py:99 +#: experiment/rules/musical_preferences.py:100 msgid "Your final results will be displayed at the end." msgstr "您的实验结果将在最后显示。" -#: experiment/rules/musical_preferences.py:119 +#: experiment/rules/musical_preferences.py:120 msgid "Tech check" msgstr "调试阶段" -#: experiment/rules/musical_preferences.py:144 +#: experiment/rules/musical_preferences.py:145 msgid "Love unlocked" msgstr "解锁乐之爱" -#: experiment/rules/musical_preferences.py:155 +#: experiment/rules/musical_preferences.py:156 msgid "Knowledge unlocked" msgstr "解锁乐之识" -#: experiment/rules/musical_preferences.py:172 +#: experiment/rules/musical_preferences.py:173 msgid "Connection unlocked" msgstr "解锁乐之友" -#: experiment/rules/musical_preferences.py:192 +#: experiment/rules/musical_preferences.py:193 msgid "2. How much do you like this song?" msgstr "2. 您对这首歌的喜欢程度是?" -#: experiment/rules/musical_preferences.py:198 +#: experiment/rules/musical_preferences.py:199 msgid "1. Do you know this song?" msgstr "1. 您知道这首歌吗?" -#: experiment/rules/musical_preferences.py:214 +#: experiment/rules/musical_preferences.py:215 #, python-format msgid "Song %(round)s/%(total)s" msgstr "%(round)s/%(total)s首歌" -#: experiment/rules/musical_preferences.py:236 +#: experiment/rules/musical_preferences.py:237 #, python-format msgid "" "I explored musical preferences on %(url)s! My top 3 favorite songs: " "%(top_participant)s. I know %(known_songs)i out of %(n_songs)i songs. All " "players' top 3 songs: %(top_all)s" msgstr "" -"一起探索音乐喜好!%(url)s 我最喜欢的三首歌曲:%(top_participant)s;我知" +"一起探索音乐喜好%(url)s! 我最喜欢的三首歌曲:%(top_participant)s;我知" "道%(n_songs)i首歌曲中的%(known_songs)i首;其他人最喜爱的三首歌曲:" "%(top_all)s。" -#: experiment/rules/musical_preferences.py:260 -#: experiment/templates/final/musical_preferences.html:2 +#: experiment/rules/musical_preferences.py:261 msgid "Thank you for your participation and contribution to science!" msgstr "感谢您的参与以及对科学的贡献!" @@ -2108,7 +2114,7 @@ msgstr "" #: experiment/templates/consent/consent_categorization.html:13 #: experiment/templates/consent/consent_hooked.html:66 #: experiment/templates/consent/consent_huang2021.html:76 -#: experiment/templates/consent/consent_musical_preferences.html:56 +#: experiment/templates/consent/consent_musical_preferences.html:57 #: experiment/templates/consent/consent_rhythm.html:17 #: experiment/templates/consent/consent_rhythm_unpaid.html:15 #: experiment/templates/consent/consent_speech2song.html:62 @@ -2175,7 +2181,6 @@ msgstr "" #: experiment/templates/consent/consent_categorization.html:5 #: experiment/templates/consent/consent_hooked.html:22 #: experiment/templates/consent/consent_huang2021.html:23 -#: experiment/templates/consent/consent_musical_preferences.html:18 msgid "Who can take part in this research?" msgstr "谁能参与这项研究?" @@ -2233,7 +2238,6 @@ msgstr "" #: experiment/templates/consent/consent_categorization.html:11 #: experiment/templates/consent/consent_hooked.html:58 #: experiment/templates/consent/consent_huang2021.html:67 -#: experiment/templates/consent/consent_musical_preferences.html:47 #: experiment/templates/consent/consent_speech2song.html:45 msgid "Confidential treatment of your details" msgstr "信息匿名和保密性" @@ -2345,7 +2349,6 @@ msgstr "" "碍患者的工作和生活开发新的方法等。" #: experiment/templates/consent/consent_hooked.html:25 -#: experiment/templates/consent/consent_musical_preferences.html:21 msgid "" "\n" " Anybody with sufficiently good hearing, natural or corrected, to enjoy " @@ -2401,7 +2404,6 @@ msgstr "" #: experiment/templates/consent/consent_hooked.html:43 #: experiment/templates/consent/consent_huang2021.html:52 -#: experiment/templates/consent/consent_musical_preferences.html:39 #: experiment/templates/consent/consent_speech2song.html:28 msgid "Voluntary participation" msgstr "自愿参与" @@ -2743,12 +2745,12 @@ msgid "" "You will be taking part in the Musical Preferences research project " "conducted by Xuan Huang under the supervision of Prof. Henkjan Honing and " "Dr. John Ashley Burgoyne of the Music Cognition Group at the University of " -"Amsterdam’s Institute for Logic, Language, and Computation. \n" +"Amsterdam’s Institute for Logic, Language, and Computation.\n" msgstr "" "\n" -"您即将参加由阿姆斯特丹大学逻辑、语言和计算研究所(ILLC)音乐认知实验组的博士" -"研究生Xuan Huang 主持的《“中国音乐饵”与记忆》的研究项目。在正式参与该研究项目" -"之前,请您仔细阅读我们的知情同意书以了解实验程序。\n" +" 您即将参加由阿姆斯特丹大学逻辑、语言和计算研究所的音乐认知实验组批准开展的" +"《音乐偏好》课题研究。该课题由博士研究生Xuan Huang主持并在Honing教授以及" +"Burgoyne博士指导下开展。\n" #: experiment/templates/consent/consent_musical_preferences.html:12 msgid "" @@ -2760,7 +2762,7 @@ msgid "" "investigate the factors that underly musical preferences in China. For " "example, do people who have preferences for classical music also have " "preferences for Chinese traditional music? Are there cultural-specific or " -"universal structural features for musical preferences? \n" +"universal structural features for musical preferences?\n" msgstr "" "\n" "研究表明,人们对音乐的文化偏好和熟悉程度从婴儿期开始显现,并持续到整个青春期" @@ -2769,80 +2771,98 @@ msgstr "" "好的人是否也对中国传统音乐有偏好?音乐偏好是否存在特定的文化或普遍的结构特" "征?\n" -#: experiment/templates/consent/consent_musical_preferences.html:26 +#: experiment/templates/consent/consent_musical_preferences.html:18 +msgid "Who can take part?" +msgstr "谁能参与该研究?" + +#: experiment/templates/consent/consent_musical_preferences.html:22 +msgid "Legally competent participants aged 16 or older." +msgstr "法定年龄满十六周岁。" + +#: experiment/templates/consent/consent_musical_preferences.html:23 +msgid "" +"Anybody with sufficient good hearing, natural or corrected, to enjoy music " +"listening is welcome to participate in this research." +msgstr "拥有先天良好听力或通过矫正听力可欣赏音乐的个体。" + +#: experiment/templates/consent/consent_musical_preferences.html:27 msgid "Instructions" msgstr "研究说明与过程" -#: experiment/templates/consent/consent_musical_preferences.html:28 +#: experiment/templates/consent/consent_musical_preferences.html:29 msgid "" "\n" "This study is a music preference experiment in which you will hear 64 music " "clips throughout the experiment, you either wear headphones or use your " "device's speakers to listen to the clips. Adjust the volume level of your " -"device before the experiment begins. \n" +"device before the experiment begins.\n" msgstr "" "\n" "该研究是一个音乐偏好实验,在整个实验里您将听到64个音乐片段,您可以佩戴耳机或" "使用设备的扬声器来聆听片段。在实验正式开始前调整好您的设备音量的大小。\n" -#: experiment/templates/consent/consent_musical_preferences.html:34 +#: experiment/templates/consent/consent_musical_preferences.html:35 msgid "" "\n" "The experiment has two parts. The first part is a questionnaire with 6 " "questions. The second part is a music preference test, where you will listen " "to a music clip and answer questions about it. The results of your music " -"preferences will be available after the experiment is completed. \n" +"preferences will be available after the experiment is completed.\n" msgstr "" "\n" "该实验有两个部分。 第一部分为调查问卷,包含6个问题。 第二部分为音乐偏好测试," "您将聆听音乐片段并回答相关问题。您的音乐偏好结果将在整个实验完成后获得。\n" -#: experiment/templates/consent/consent_musical_preferences.html:42 +#: experiment/templates/consent/consent_musical_preferences.html:40 +msgid "Voluntary participation & risks" +msgstr "自愿参加与不适" + +#: experiment/templates/consent/consent_musical_preferences.html:43 msgid "" "\n" -"You will be participating in this research project on a voluntary basis. " -"This means you are free to stop taking part at any stage without " -"consequences or penalty. If you decide to stop or withdraw your consent, all " -"the information gathered up until then will be permanently deleted. \n" +"You will be participating in this research on a voluntary basis. This means " +"you are free to stop taking part at any stage without consequences or " +"penalty. If you decide to stop or withdraw your consent, all the " +"information gathered up until then will be permanently deleted. This " +"research has no known risks.\n" msgstr "" "\n" "参加本研究是完全自愿的。您可以拒绝参加研究,或者在研究过程中的任何时候选择退" -"出研究,不需任何理由,且您的数据将被永久删除。这项研究没有已知的风险。\n" +"出研究,不需任何理由,且您的数据将被永久删除。 这项研究没有已知的风险。 \n" -#: experiment/templates/consent/consent_musical_preferences.html:50 +#: experiment/templates/consent/consent_musical_preferences.html:48 +msgid "Privacy" +msgstr "隐私问题" + +#: experiment/templates/consent/consent_musical_preferences.html:51 msgid "" " \n" -"The information gathered over the course of this research will be used for " -"further analysis and publication in scientific journals only. Fully " -"anonymised data collected during the experiment may be made available online " -"in tandem with these scientific publications. We guarantee that you will " -"remain anonymous under all circumstances. Your personal details will not be " -"viewed by third parties without your express permission.\n" +"The information gathered will be used for publication in scientific journals " +"only. Fully anonymized data may be available online in tandem with these " +"scientific publications. We guarantee that you will remain anonymous under " +"all circumstances. Your personal information will not be viewed by third " +"parties without your express permission.\n" msgstr "" " \n" "在此研究过程中所搜集的信息仅用于科学研究。数据完全匿名,可能会随着研究结果发" "表一同展示。我们保证您在任何情况下都将保持匿名。此外,未经您的明确许可,您的" -"个人信息将不会被第三方查看 \n" +"个人信息将不会被第三方查看。\n" -#: experiment/templates/consent/consent_musical_preferences.html:59 +#: experiment/templates/consent/consent_musical_preferences.html:60 msgid "" " For further information, please contact Xuan Huang (x.huang@uva.nl) or Dr. " "John Ashley Burgoyne (j.a.burgoyne@uva.nl). If you have any complaints " "regarding this project, you can contact the Secretary of the Ethics " "Committee of the Faculty of Humanities of the University of Amsterdam " -"(commissie-ethiek-fgw@uva.nl). \n" +"(commissie-ethiek-fgw@uva.nl).\n" " " msgstr "" -"如您需了解关于本研究项目的更多信息,请联系Xuan Huang(邮箱: x.huang@uva.nl; 地" -"址: Science Park 107, 1098 GE Amsterdam)或者John A. Burgoyne 博士 ( 电话: " -"+31205257034;邮箱: j.a.burgoyne@uva.nl; 地址: Science Park 107, 1098 GE " -"Amsterdam)。如果您对此研究项目有任何投诉,请联系阿姆斯特丹大学人文学院伦理委" -"员会秘书 (the secretary of the Ethics Committee of the Faculty of Humanities " -"of the University of Amsterdam),电话: +31205253054;邮箱: commissie-ethiek-" -"fgw@uva.nl; 地址: Kloveniersburgwal 48, 1012 CX Amsterdam。\n" +"如您需了解关于此研究项目的更多信息,请联系Xuan Huang(邮箱:x.huang@uva.nl)或" +"Burgoyne博士(邮箱:j.a.burgoyne@uva.nl)。如果您对此研究项目有任何投诉,请联系" +"阿姆斯特丹大学人文学院伦理委员会秘书(邮箱:commissie-ethiek-fgw@uva.nl)。\n" " " -#: experiment/templates/consent/consent_musical_preferences.html:66 +#: experiment/templates/consent/consent_musical_preferences.html:67 msgid "" " \n" " I have been clearly informed about the research project and I consent to " @@ -2852,8 +2872,8 @@ msgid "" "participation. " msgstr "" " \n" -"我已经阅读了知情同意书,我同意参与该项研究。我有权撤销这一同意而无须提供任何理" -"由。我知道我有权在任何时候中止研究,可以撤回我的参与。" +"我已经阅读了知情同意书,我同意参与该项研究。我有权撤销这一同意而无须提供任何 " +"理由。我知道我有权在任何时候中止研究,可以撤回我的参与。" #: experiment/templates/consent/consent_rhythm.html:2 #: experiment/templates/consent/consent_rhythm_unpaid.html:2 @@ -3236,14 +3256,6 @@ msgstr "" msgid "Did you know..." msgstr "" -#: experiment/templates/final/musical_preferences.html:5 -msgid "Your Top 5 favorite songs:" -msgstr "" - -#: experiment/templates/final/musical_preferences.html:13 -msgid "Top 5 favorite songs:" -msgstr "" - #: experiment/templates/html/huang_2022/audio_check.html:3 msgid "Check volume" msgstr "检查设备音量大小。" @@ -3264,7 +3276,7 @@ msgstr "在%(n_songs)s首歌曲里,您最喜欢的3首歌曲是:" #: experiment/templates/html/musical_preferences/feedback.html:30 #, python-format msgid " Of %(n_songs)s songs, you know %(n_known_songs)s" -msgstr "在%(n_songs)s首歌曲里,您知道 %(n_known_songs)s的歌曲。" +msgstr "在%(n_songs)s首歌曲里,您知道 %(n_known_songs)s首。" #: experiment/templates/html/musical_preferences/feedback.html:44 msgid "All players' top 3 favourite songs:" From b3fd7951965f6b6eabb3a709fc74359057098438 Mon Sep 17 00:00:00 2001 From: BeritJanssen Date: Mon, 20 Nov 2023 14:30:44 +0100 Subject: [PATCH 20/21] sort rules files by ID --- backend/experiment/forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/experiment/forms.py b/backend/experiment/forms.py index 148aa680b..acbf046ce 100644 --- a/backend/experiment/forms.py +++ b/backend/experiment/forms.py @@ -130,7 +130,7 @@ def __init__(self, *args, **kwargs): choices += ((i, EXPERIMENT_RULES[i].__name__),) self.fields['rules'] = ChoiceField( - choices=choices + choices=sorted(choices) ) self.fields['questions'] = TypedMultipleChoiceField( From 5acfa87e93342d1675c7fdb8e7db0e3d028f75d1 Mon Sep 17 00:00:00 2001 From: BeritJanssen Date: Mon, 27 Nov 2023 12:03:02 +0100 Subject: [PATCH 21/21] increment version number --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8324090b7..96baedfeb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aml-experiments", - "version": "1.5.0", + "version": "1.6.0", "private": true, "__comment1__": "private set to true to suppress 'warning package.json: No license field'",