Paket Penggunaan-suara: Efek Suara di Aplikasi Bereaksi

Mungkin faktanya adalah saya secara profesional terlibat dalam suara, tetapi saya ingin web menjadi lebih keras.

Saya tahu bahwa banyak orang tidak akan mendukung saya dalam keinginan ini. Dan bukan tanpa alasan! Secara historis, suara di Internet digunakan dengan sangat tidak berhasil dan jelek:

  • Pada hari-hari awal web, beberapa halaman memainkan musik MIDI latar belakang.
  • Scammer pop-up menggunakan suara untuk mencapai tujuan buruk mereka. Mereka, dengan bantuan suara, berusaha menarik perhatian pengguna dan membuat penipuan lebih bisa dipercaya.
  • Suara hadir dalam video yang dimulai secara otomatis (well, ini benar-benar mimpi buruk).

Benar, saya yakin bahwa sepenuhnya mengabaikan suara seolah-olah seorang anak terciprat dengan air. Suara dapat menekankan tindakan pengguna, mereka dapat meningkatkan umpan balik. Suara itu bisa mencerahkan sedikit aksi membosankan. Jika suara pada halaman web digunakan dengan rasa, mereka dapat meningkatkan pengalaman pengguna proyek, membuatnya lebih "nyata" dan nyata. Gagasan ini bukan hal baru: di game dan di aplikasi seluler, suara selalu digunakan. Faktanya, web adalah pengecualian aneh terhadap tren umum. Sebagian besar produk digital yang muncul di benak saya menggunakan suara. Saya tidak berbicara tentang respons sentuhan yang digunakan dalam aplikasi seluler untuk membawa mereka lebih dekat dengan kenyataan.





Selama bekerja di blog saya, saya ingin bereksperimen dengan suara. Banyak elemen antarmuka blog saya yang berinteraksi dengan pengguna menghasilkan suara pendek yang tenang. Misalnya, di bagian kanan atas beranda blog , ada beberapa tombol untuk bertukar tema dan untuk menghidupkan dan mematikan suara.

Karena suara di web jarang digunakan, penggunaannya dapat berdampak besar pada persepsi situs oleh pengguna. Ini adalah semacam senjata rahasia pengembang, yang penggunaannya dapat menyebabkan dampak positif yang sangat besar pada proyek-proyek tertentu.

Untuk menyederhanakan penggunaan suara, saya merancang kait yang digunakan oleh saya untuk bekerja dengan suara dalam bentuk paket npm independen use-sounddan menerbitkannya. Di sini saya akan berbicara tentang kemampuan kait ini dan berbagi kiat menggunakan suara di web.

Jika Anda ingin melihat kode dan mulai menggunakan kait ini - ini adalah repositori GitHub-nya.

Gambaran


Paket use-soundini adalah kait Bereaksi yang membantu pengembang menggunakan efek suara. Berikut ini sebuah contoh:

import useSound from 'use-sound';
import boopSfx from '../../sounds/boop.mp3';
const BoopButton = () => {
  const [play] = useSound(boopSfx);
  return <button onClick={play}>Boop!</button>;
};

Menggunakan pengait ini menambah sekitar 1 Kb ke build proyek. Benar, ia, dalam mode asinkron, memuat ketergantungan Howler pihak ketiga , yang ukurannya 10 KB.

Hook memberi pengembang banyak fitur bagus. Di antara mereka, saya ingin mencatat yang berikut:

  • Hentikan pemutaran sebelum waktunya, serta jeda dan lanjutkan pemutaran.
  • Mengunduh sesuatu seperti “sprite sheet” suara dan membaginya menjadi suara yang terpisah.
  • Mengatur kecepatan pemutaran dengan kemampuan untuk mempercepat dan memperlambat pemutaran suara.
  • Banyak pendengar acara.
  • Banyak fitur canggih yang tersedia berkat Howler.

Berikut ini adalah dokumentasi kait di mana Anda dapat menemukan panduan terperinci untuk penggunaannya dan referensi API.

Dasar-dasar penggunaan-suara


Stall Instalasi


Pertama, Anda perlu menginstal paket menggunakan benang atau npm:

#  yarn
yarn add use-sound
#  NPM
npm install use-sound

▍ Impor


Paket use-soundmengekspor satu-satunya nilai default - ini adalah sebuah kait useSound. Anda dapat mengimpornya seperti ini:

import useSound from 'use-sound';

Selain itu, Anda perlu mengimpor file audio yang Anda rencanakan untuk digunakan.

Jika, saat mengerjakan proyek Bereaksi, Anda menggunakan sesuatu seperti create-react-appGatsby, maka Anda harus dapat mengimpor file MP3 dengan cara yang sama seperti Anda mengimpor gambar seperti sumber daya lainnya:

import boopSfx from '../../sounds/boop.mp3';

Jika Anda menggunakan konfigurasi Webpack yang ditulis sendiri, maka Anda harus menggunakan pemuat file-loader untuk memproses file .mp3 .

Selain itu, Anda dapat bekerja dengan file suara yang ditempatkan di folder publicatau static. Misalnya, demo yang ditunjukkan dalam artikel ini menggunakan file statis yang berada di folder publik.

Cari dan siapkan suara


Menginstal dependensi dan menulis kode hanyalah setengah dari perjuangan. Untuk mencetak halaman, kita perlu memilih suara yang sesuai.

Sumber daya favorit saya untuk mencari suara adalah freesound.org . Hampir semua suara yang digunakan di blog saya, saya temukan di sana. Ada banyak suara yang dilisensikan di bawah Creative Commons Zero . Untuk mengunduh file, Anda perlu mendaftar di sumber. Anda dapat menggunakan suara secara gratis.

Bersiaplah untuk kenyataan bahwa untuk memilih suara yang tepat Anda harus menggeledah isi freesound.org dengan serius. Intinya di sini adalah, misalnya, bahwa banyak suara berkualitas buruk. Proses menemukan suara yang tepat dapat dibandingkan dengan proses mencari jarum di tumpukan jerami. Dan persiapan suara yang ditemukan untuk penggunaan aktual menyerupai segi berlian yang belum dipotong.

▍Persiapan suara


Banyak suara yang diambil dari freesound.org membutuhkan beberapa perbaikan:

  • Suara, seperti string, dapat dibingkai oleh ruang kosong. Fragmen keheningan biasanya dipotong, sebagai akibatnya, efek suara yang sesuai direproduksi segera setelah terjadinya peristiwa bersuara.
  • Saat menyiapkan suara, Anda mungkin perlu menyesuaikan volumenya, sehingga semua suara yang digunakan dalam satu proyek memiliki volume yang sama.
  • Freesound.org menyimpan suara dalam berbagai format audio. Anda mungkin perlu mengubah suara yang Anda suka ke MP3.

Anda dapat menggunakan Audacity untuk menyelesaikan semua pengeditan ini. Ini adalah editor audio cross-platform open source gratis. Di sini saya tidak akan berbicara tentang cara menggunakan editor ini, tetapi ada banyak tutorial bagus tentang itu.

Mengapa saya berbicara tentang mengkonversi suara ke MP3? Faktanya adalah bahwa sebelum tidak ada format audio yang didukung oleh semua browser. Oleh karena itu, sudah biasa untuk memasukkan file MP3, AIFF, dan WAV dalam proyek dan menggunakannya dalam lingkungan yang mendukungnya.

Dalam kondisi modern, untungnya bagi kita, format MP3 didukung oleh semua browser utama, termasuk IE 9. Suara yang disimpan dalam format MP3 juga dikompresi dengan sangat baik. Dan ini memungkinkan Anda untuk pergi ke file yang jauh lebih kecil daripada menggunakan format alternatif yang menyandikan suara tanpa kehilangan kualitas.

Suara dan Ketersediaan


Meskipun saya menganjurkan penggunaan suara di web, saya akui bahwa tidak semua pengguna akan menyukainya. Dan di sini kita berbicara tentang pertimbangan yang melampaui keinginan subjektif untuk diam.

Orang yang memiliki masalah penglihatan menggunakan pembaca layar untuk menggunakan halaman web. Selain itu, kami berbicara tidak hanya tentang mereka yang tidak melihat halaman. Pembaca layar, misalnya, digunakan oleh orang-orang dengan disleksia yang kesulitan membaca teks dan orang-orang dengan masalah serupa lainnya. Pembaca layar adalah program yang mem-parsing dokumen dan membaca teks. Jika sebuah situs berisi banyak efek suara, mereka dapat mengganggu operasi normal program yang membaca teks dari layar. Dan ini, pada gilirannya, akan mencegah orang-orang yang mengandalkan program semacam itu untuk bekerja dengan situs tersebut.

Untuk alasan ini, penting bahwa tombol untuk menghidupkan dan mematikan suara dimasukkan dalam halaman situs. Selain itu, tombol seperti itu harus tersedia untuk navigasi keyboard (menggunakan tombol Tab). Idealnya, sampai pengguna mencapai tombol seperti itu menggunakan tombol Tab, tidak ada suara yang dimainkan. Selain itu, proyek web perlu mengingat keadaan tombol ini - sehingga pengguna tidak harus terus-menerus menggunakan untuk mematikan suara.

Di sisi lain, pengguna tuna rungu bahkan tidak akan tahu bahwa interaksi tertentu dengan halaman disertai dengan suara. Hal yang sama berlaku untuk orang yang bekerja di Internet dengan suara dimatikan. Untuk alasan ini, penting untuk tidak hanya mengandalkan suara ketika melakukan tindakan penting tertentu. Jika suara digunakan sebagai konfirmasi atas beberapa tindakan pengguna, pastikan bahwa konfirmasi visual atas tindakan ini juga ditampilkan pada halaman. Situs harus tetap berfungsi penuh dan bebas suara.

Resep


Lihatlah beberapa contoh (di bagian yang sesuai dari asli artikel ini, Anda dapat bereksperimen dengan mereka secara interaktif dan mendengarkan suara yang dibuat oleh kontrol yang berbeda).

▍ Kotak centang


Saya sangat suka bendera ini. Jika Anda menggunakan mouse, klik pertama padanya dengan sangat cepat, dan kemudian ada sedikit jeda antara saat Anda mengklik dan lepaskan tombol mouse.

function Demo() {
  const [isChecked, setIsChecked] = React.useState(
    false
  );

  const [playActive] = useSound(
    '/sounds/pop-down.mp3',
    { volume: 0.25 }
  );
  const [playOn] = useSound(
    '/sounds/pop-up-on.mp3',
    { volume: 0.25 }
  );
  const [playOff] = useSound(
    '/sounds/pop-up-off.mp3',
    { volume: 0.25 }
  );

  return (
    <Checkbox
      name="demo-checkbox"
      checked={isChecked}
      size={24}
      label="I agree to self-isolate"
      onChange={() => setIsChecked(!isChecked)}
      onMouseDown={playActive}
      onMouseUp={() => {
        isChecked ? playOff() : playOn();
      }}
    />
  );
}

▍ Gangguan awal reproduksi suara


Terkadang Anda ingin suara dimainkan hanya ketika pengguna berinteraksi dengan kontrol tertentu. Perhatikan cara dalam contoh berikut ini bahwa suara hanya direproduksi ketika pointer berada di atas kontrol.

function Demo() {
  // ,  ,  'rising-pops' :
  // - fanfare
  // - dun-dun-dun
  // - guitar-loop
  const soundUrl = '/sounds/rising-pops.mp3';

  const [play, { stop }] = useSound(
    soundUrl,
    { volume: 0.5 }
  );

  const [isHovering, setIsHovering] = React.useState(
    false
  );

  return (
    <Button
      onMouseEnter={() => {
        setIsHovering(true);
        play();
      }}
      onMouseLeave={() => {
        setIsHovering(false);
        stop();
      }}
    >
      <ButtonContents isHovering={isHovering}>
        Hover over me!
      </ButtonContents>
    </Button>
  );
}

▍Meningkatkan pitch


Dan ini adalah contoh dari satu efek yang menarik. Terdiri dari fakta bahwa suara yang direproduksi dengan klik berikutnya pada tombol Suka lebih tinggi daripada suara yang dihasilkan oleh klik sebelumnya:

function Demo() {
  const soundUrl = '/sounds/glug-a.mp3';

  const [playbackRate, setPlaybackRate] = React.useState(0.75);

  const [play] = useSound(soundUrl, {
    playbackRate,
    volume: 0.5,
  });

  const handleClick = () => {
    setPlaybackRate(playbackRate + 0.1);
    play();
  };

  return (
    <Button onClick={handleClick}>
      <span role="img" aria-label="Heart">
      </span>
    </Button>
  );
}

▍ Tombol untuk memulai dan menjeda pemutaran


Berikut adalah kode implementasi untuk tombol untuk memulai dan menjeda suara, yang akan membantu Anda dalam mengembangkan Spotify baru:

function Demo() {
  const soundUrl = '/sounds/guitar-loop.mp3';

  const [play, { stop, isPlaying }] = useSound(soundUrl);

  return (
    <PlayButton
      active={isPlaying}
      size={60}
      iconColor="var(--color-background)"
      idleBackgroundColor="var(--color-text)"
      activeBackgroundColor="var(--color-primary)"
      play={play}
      stop={stop}
    />
  );
}

OundMenemukan “daftar sprite”


Jika Anda berencana untuk menggunakan banyak suara di komponen Bereaksi Anda, maka mungkin masuk akal untuk menggunakan "daftar sprite" suara. Sound sprite list adalah file yang berisi banyak suara berbeda. Dengan mengemasnya menjadi satu file, kami meningkatkan kenyamanan bekerja dengannya dan menghindari membuat banyak permintaan HTTP paralel untuk mengunduh file individual (Saya berharap bahwa suatu hari nanti kita akan dapat menggunakan HTTP / 2 multiplexing).

Di sini kita menggunakan "daftar sprite" suara untuk membuat mesin drum. Anda dapat memutar gulungan virtual dengan mouse atau dengan tombol 1-4 pada keyboard.

function Demo() {
  const soundUrl = '/sounds/909-drums.mp3';

  const [play] = useSound(soundUrl, {
    sprite: {
      kick: [0, 350],
      hihat: [374, 160],
      snare: [666, 290],
      cowbell: [968, 200],
    }
  });

  //  ,   'keydown',
  //    .
  useKeyboardBindings({
    1: () => play({ id: 'kick' }),
    2: () => play({ id: 'hihat' }),
    3: () => play({ id: 'snare' }),
    4: () => play({ id: 'cowbell' }),
  })

  return (
    <>
      <Button
        aria-label="kick"
        onMouseDown={() => play({ id: 'kick' })}
      >
        1
      </Button>
      <Button
        aria-label="hihat"
        onMouseDown={() => play({ id: 'hihat' })}
      >
        2
      </Button>
      <Button
        aria-label="snare"
        onMouseDown={() => play({ id: 'snare' })}
      >
        3
      </Button>
      <Button
        aria-label="cowbell"
        onMouseDown={() => play({ id: 'cowbell' })}
      >
        4
      </Button>
    </>
  );
}

Rincian tentang penggunaan "daftar sprite" suara dalam paket use-sounddapat ditemukan di sini .

Ringkasan


Di bidang penggunaan suara ketika mengembangkan situs web, saya paling khawatir tentang fakta bahwa ini adalah area yang telah dipelajari sangat sedikit. Saya telah bereksperimen dengan suara untuk beberapa waktu, tetapi saya masih merasa bahwa saya hanya di awal perjalanan.

Jadi, sekarang Anda memiliki alat yang dapat Anda gunakan untuk memulai percobaan Anda sendiri dengan suara. Saya sarankan Anda melakukan ini dan mencari tahu di mana itu akan menuntun Anda.

Pembaca yang budiman! Bagaimana perasaan Anda tentang menggunakan suara di halaman web?


All Articles