Audivelle
Your library, beautifully heard.
คลังเพลงของคุณ ในเสียงที่ควรจะเป็น
A high-resolution music player for the files you already own. Audivelle scans your phone, never transcodes what you import, and does its decoding on the device — including a FLAC, WavPack, Monkey's Audio and DSD engine written for this app in C++. There is no account, no advertising, and no analytics, crash-reporting or attribution library anywhere in its source.
เครื่องเล่นเพลงความละเอียดสูงสำหรับไฟล์ที่คุณมีอยู่แล้ว Audivelle สแกนเครื่องของคุณ ไม่แปลงไฟล์ที่นำเข้า และถอดรหัสเสียงบนอุปกรณ์ — รวมถึงเอนจิน FLAC, WavPack, Monkey's Audio และ DSD ที่เขียนขึ้นเองด้วย C++ สำหรับแอปนี้ ไม่มีบัญชีผู้ใช้ ไม่มีโฆษณา และไม่มีไลบรารี analytics, crash-reporting หรือ attribution อยู่ในซอร์สเลย
- Formats scanned
- นามสกุลที่สแกน
- 16
- Tests, 0 failing
- เทสต์ ไม่มีตก
- 318 +9
- Trackers
- ตัวติดตาม
- 0
What it isมันคืออะไร
A player for people who kept the files.
เครื่องเล่นสำหรับคนที่ยังเก็บไฟล์เพลงไว้
Most music apps are a front end for somebody's catalogue. Audivelle is a front end for yours. It assumes you bought the record, ripped the CD, or downloaded the 24-bit master, and that you would like it played back accurately and left alone.
แอปฟังเพลงส่วนใหญ่คือหน้าตาของคลังเพลงที่คนอื่นเป็นเจ้าของ Audivelle คือหน้าตาของคลังเพลงที่คุณเป็นเจ้าของ มันตั้งสมมติฐานว่าคุณซื้อแผ่นมา ริปจากซีดี หรือดาวน์โหลดไฟล์ master 24-bit มาเอง และคุณอยากให้มันถูกเล่นออกมาอย่างตรงไปตรงมา โดยไม่มีใครไปยุ่งกับมัน
Your files are not touched
ไฟล์ของคุณไม่ถูกแตะต้อง
Nothing is transcoded, re-tagged or rewritten on import. A file that arrives as a 24-bit/192 kHz FLAC is stored as that exact file, byte for byte, and is what gets decoded at playback. No converted copy is written to storage, including for DSD.
ไม่มีการแปลงฟอร์แมต แก้แท็ก หรือเขียนไฟล์ใหม่ตอนนำเข้า ไฟล์ FLAC 24-bit/192 kHz จะถูกเก็บเป็นไฟล์เดิมทุกไบต์ และเป็นไฟล์เดียวกับที่ถูกถอดรหัสตอนเล่น ไม่มีการเขียนสำเนาที่แปลงแล้วลงเครื่อง แม้แต่กับ DSD
Because a library you cannot move to another player is not your library.
เพราะคลังเพลงที่ย้ายไปเครื่องเล่นอื่นไม่ได้ ก็ไม่ใช่คลังเพลงของคุณจริง ๆ
Nothing runs on the signal unless you ask
ไม่มีอะไรทำงานกับสัญญาณจนกว่าคุณจะสั่ง
The equalizer ships off. ReplayGain ships off and only ever acts when the file already carries the tags. There is no loudness enhancer, no bass boost, and no "audio effect" quietly enabled on first launch to make the app sound louder than the last one you tried.
อีควอไลเซอร์ปิดมาตั้งแต่ต้น ReplayGain ก็ปิดมาตั้งแต่ต้น และทำงานเฉพาะเมื่อไฟล์มีแท็กอยู่แล้วเท่านั้น ไม่มี loudness enhancer ไม่มี bass boost และไม่มี "เอฟเฟกต์เสียง" ที่แอบเปิดไว้ตอนเปิดแอปครั้งแรก เพื่อให้ดังกว่าแอปที่คุณเพิ่งลองมา
Because the default has to be the recording, not our taste in it.
เพราะค่าเริ่มต้นควรเป็นตัวบันทึกเสียง ไม่ใช่รสนิยมของเราที่มีต่อมัน
The app tells you what actually happened
แอปบอกคุณว่าเกิดอะไรขึ้นจริง ๆ
Now Playing shows the source format, sample rate, bit depth and channel count, and the app reports the rate the hardware actually chose rather than the rate it asked for. When a route cannot carry the file untouched, the app says so instead of implying otherwise.
หน้า Now Playing แสดงฟอร์แมตต้นทาง sample rate, bit depth และจำนวนแชนเนล และแอปรายงานอัตราที่ฮาร์ดแวร์เลือกจริง ไม่ใช่อัตราที่แอปขอไป เมื่อเส้นทางเสียงส่งไฟล์ออกไปแบบไม่แตะต้องไม่ได้ แอปจะบอกตามนั้น ไม่ทำให้เข้าใจเป็นอย่างอื่น
Because "hi-res" printed on a screen is not the same as hi-res leaving the jack.
เพราะคำว่า "hi-res" ที่ขึ้นบนจอ ไม่เท่ากับ hi-res ที่ออกจากช่องเสียบจริง
Getting music on is not a chore
การเอาเพลงเข้าเครื่องไม่ใช่เรื่องน่ารำคาญ
Wi-Fi Import turns the phone into a one-page upload server on your own network: open the address in a desktop browser and drop files on it. On Android you can instead point the app at folders you choose and play from them read-only, without copying anything.
Wi-Fi Import เปลี่ยนโทรศัพท์ให้เป็นเซิร์ฟเวอร์อัปโหลดหน้าเดียวบนเครือข่ายของคุณเอง เปิดที่อยู่ในเบราว์เซอร์บนคอมพิวเตอร์แล้วลากไฟล์ลงไป หรือบน Android จะเลือกโฟลเดอร์ให้แอปอ่านอย่างเดียวแล้วเล่นจากตรงนั้นโดยไม่ต้องคัดลอกอะไรเลยก็ได้
Because a cable and a vendor sync app is a bad way to spend an evening.
เพราะการนั่งต่อสายกับแอป sync ของผู้ผลิต ไม่ใช่วิธีใช้เวลาช่วงเย็นที่ดีนัก
It behaves like a music player should
มันทำตัวอย่างที่เครื่องเล่นเพลงควรทำ
Gapless playback, an inspectable and reorderable Playing Next queue, favourites, playlists with M3U8 import and export, CUE sheets split into seekable tracks, synchronized LRC lyrics, sleep timers, and a session that survives a restart with position, shuffle and repeat intact.
เล่นต่อเนื่องแบบ gapless คิว Playing Next ที่เปิดดูและจัดลำดับใหม่ได้ รายการโปรด เพลย์ลิสต์ที่นำเข้า/ส่งออกเป็น M3U8 ได้ ไฟล์ CUE ที่ถูกแยกเป็นแทร็กที่กดข้ามได้ เนื้อเพลง LRC ที่วิ่งตามเพลง ตั้งเวลาปิด และเซสชันที่รอดจากการปิดแอป พร้อมตำแหน่งเพลง shuffle และ repeat ครบ
Because the basics being right is the whole product.
เพราะการทำพื้นฐานให้ถูก คือตัวผลิตภัณฑ์ทั้งหมด
One design on both phones
ดีไซน์เดียวกันบนทั้งสองระบบ
iOS and Android are built from the same visual system rather than two apps that happen to share a name — the same type ramp, the same hairlines, the same rule about which colour is allowed to mean what. Two skins ship, and both are held to the same contrast floor.
iOS และ Android ถูกสร้างจากระบบภาพชุดเดียวกัน ไม่ใช่สองแอปที่บังเอิญชื่อเหมือนกัน — type ramp เดียวกัน เส้น hairline เดียวกัน และกติกาเดียวกันว่าสีไหนมีสิทธิ์สื่อความหมายอะไร มีสองสกินให้เลือก และทั้งคู่ถูกบังคับด้วยเกณฑ์ contrast ขั้นต่ำเดียวกัน
Because a product that looks like two products is two products.
เพราะผลิตภัณฑ์ที่ดูเหมือนสองผลิตภัณฑ์ ก็คือสองผลิตภัณฑ์
Interfaceหน้าตา
One accent colour, and it only ever states a fact.
สีเน้นมีสีเดียว และมันใช้บอกข้อเท็จจริงเท่านั้น
The default skin is called Obi, after the printed band around a Japanese LP sleeve that carries the catalogue number and the format in tight type. Pages are monochrome, artwork is the only image, and amber appears in exactly one situation: the app is declaring something about the file. A 44.1/16 rip and a 192/24 master are different objects in the same list, so the difference is the loudest thing on screen instead of grey text ellipsised off the end of a subtitle.
สกินเริ่มต้นชื่อ Obi ตามแถบกระดาษที่พันขอบปกแผ่นเสียงญี่ปุ่น ซึ่งพิมพ์หมายเลขแคตตาล็อกและฟอร์แมตไว้ด้วยตัวอักษรแน่น ๆ บนแถบเดียว หน้าจอเป็นโมโนโครม ปกอัลบั้มเป็นภาพเดียวในหน้า และสีเหลืองอำพันจะโผล่มาในกรณีเดียวเท่านั้น คือตอนที่แอปกำลังประกาศข้อมูลของไฟล์ ไฟล์ริป 44.1/16 กับไฟล์ master 192/24 เป็นคนละสิ่งกันทั้งที่อยู่ในลิสต์เดียวกัน ความต่างนั้นจึงเป็นสิ่งที่เด่นที่สุดบนจอ แทนที่จะเป็นข้อความสีเทาที่ถูกตัดหายไปท้ายบรรทัด
About these images. They are drawn in HTML and CSS from the same design tokens the apps compile — the colour values, type scale and hairline metrics come out of the theme source file, not out of a mockup tool. They are a rendering of the interface, not photographs of a published build, and the track names in them are examples. เกี่ยวกับภาพเหล่านี้ ภาพทั้งหมดวาดด้วย HTML และ CSS จาก design token ชุดเดียวกับที่แอปคอมไพล์ — ค่าสี type scale และความหนาเส้น hairline ดึงมาจากไฟล์ธีมของโปรเจกต์จริง ไม่ได้มาจากโปรแกรมทำ mockup ภาพเหล่านี้เป็นการเรนเดอร์หน้าตาแอป ไม่ใช่ภาพถ่ายจากบิลด์ที่เผยแพร่แล้ว และชื่อเพลงในภาพเป็นตัวอย่าง
Formatsไฟล์ที่รองรับ
Eleven formats. Six of them decoded by our own engine.
สิบเอ็ดฟอร์แมต หกในนั้นถอดรหัสด้วยเอนจินของเราเอง
A library scan recognises 16 file extensions. Where the operating system already has a good decoder — MP3, AAC, ALAC, Ogg, Opus — the app uses it rather than duplicating it. Where the phone has no decoder at all, or where we wanted control over the exact conversion, the shared C++ core does the work: the same code compiled into both the iOS and the Android app, dispatching on the file's magic bytes rather than on its extension.
การสแกนคลังเพลงรู้จักนามสกุลไฟล์ 16 แบบ ในกรณีที่ระบบปฏิบัติการมี decoder ที่ดีอยู่แล้ว — MP3, AAC, ALAC, Ogg, Opus — แอปจะใช้ของระบบแทนที่จะเขียนซ้ำ ส่วนกรณีที่โทรศัพท์ไม่มี decoder ให้เลย หรือกรณีที่เราต้องการควบคุมวิธีแปลงอย่างละเอียด แกน C++ ที่ใช้ร่วมกันจะเป็นคนทำ — โค้ดชุดเดียวกันที่คอมไพล์เข้าไปทั้งในแอป iOS และ Android และเลือก decoder จาก magic bytes ของไฟล์ ไม่ใช่จากนามสกุล
| Formatฟอร์แมต | Decoded byถอดรหัสโดย | What the code actually acceptsสิ่งที่โค้ดรับจริง |
|---|---|---|
| FLAC.flac | Our engineเอนจินของเรา libFLAC 1.5.0, vendoredlibFLAC 1.5.0 ที่ผนวกมาในโปรเจกต์ | 1–655,350 Hz, 1–8 channels, 4–32 bits. The stream's MD5 signature is verified as it plays: a mismatch stops with an error instead of quietly playing damaged audio. Ogg-FLAC is not handled. 1–655,350 Hz, 1–8 แชนเนล, 4–32 bit ลายเซ็น MD5 ของสตรีมถูกตรวจระหว่างเล่น ถ้าไม่ตรงจะหยุดพร้อมแจ้งข้อผิดพลาด แทนที่จะเล่นเสียงที่เสียหายเงียบ ๆ ไม่รองรับ Ogg-FLAC |
| DSD.dsf · .dff | Our engineเอนจินของเรา DSF and uncompressed DSDIFFDSF และ DSDIFF แบบไม่บีบอัด | DSD64 to DSD512, mono or stereo only. Converted in real time to 24-bit PCM at 88.2/96 kHz or 176.4/192 kHz. DST-compressed DSD and multichannel DSD are refused by name. DSD64 ถึง DSD512 เฉพาะ mono หรือ stereo แปลงเป็น PCM 24-bit ที่ 88.2/96 kHz หรือ 176.4/192 kHz แบบ real time ส่วน DSD ที่บีบอัดด้วย DST และ DSD หลายแชนเนลถูกปฏิเสธอย่างชัดเจน |
| WavPack.wv | Our engineเอนจินของเรา Neither OS ships oneไม่มีระบบปฏิบัติการไหนมีให้ | 1–8 channels, 1–32 bits; float streams are reported as 32-bit. Hybrid WavPack plays as its lossy half — the correction file is not read, so such a file is not lossless here. Output is mono or stereo. 1–8 แชนเนล, 1–32 bit สตรีมแบบ float จะถูกรายงานเป็น 32-bit ส่วน hybrid WavPack จะเล่นเฉพาะครึ่งที่เป็น lossy เพราะไม่ได้อ่านไฟล์ correction ไฟล์แบบนั้นจึงไม่ใช่ lossless ในแอปนี้ เอาต์พุตเป็น mono หรือ stereo |
| Monkey's Audio.ape | Our engineเอนจินของเรา Monkey's Audio SDK 3.99Monkey's Audio SDK 3.99 | 8/16/24/32-bit, 1–8 channels, files below 2 GB. A file written by a much newer encoder may be refused rather than played. Output is mono or stereo. 8/16/24/32-bit, 1–8 แชนเนล ไฟล์ต่ำกว่า 2 GB ไฟล์ที่เขียนด้วย encoder รุ่นใหม่กว่ามากอาจถูกปฏิเสธแทนที่จะเล่น เอาต์พุตเป็น mono หรือ stereo |
| WAV.wav · .wave | Our engineเอนจินของเรา | Integer PCM at 16, 24 or 32 bits, 1–8 channels. WAVE_FORMAT_EXTENSIBLE is accepted only with the PCM sub-format GUID. Float WAV and other depths are refused. PCM แบบ integer ที่ 16, 24 หรือ 32 bit, 1–8 แชนเนล WAVE_FORMAT_EXTENSIBLE รับเฉพาะเมื่อ sub-format GUID เป็น PCM ส่วน WAV แบบ float และความลึกบิตอื่นถูกปฏิเสธ |
| AIFF.aif · .aiff | Our engineเอนจินของเรา | Same integer-PCM rules as WAV. AIFC is accepted only when it is uncompressed (NONE or twos); every other AIFC compression type is refused. กติกา integer PCM เหมือน WAV ส่วน AIFC รับเฉพาะแบบไม่บีบอัด (NONE หรือ twos) การบีบอัด AIFC แบบอื่นถูกปฏิเสธทั้งหมด |
| MP3.mp3 | Platformของระบบ | CBR and VBR. Constant-bitrate seeking is enabled for files with no usable seek index, so scrubbing works on a plain CBR rip. Encoder delay and padding still depend on the file carrying valid gapless metadata. รองรับทั้ง CBR และ VBR เปิดการค้นหาตำแหน่งแบบ constant-bitrate สำหรับไฟล์ที่ไม่มี seek index ที่ใช้ได้ การลากหาตำแหน่งจึงทำงานกับไฟล์ CBR ธรรมดา ส่วน encoder delay/padding ยังขึ้นกับว่าไฟล์มี metadata gapless ที่ถูกต้องหรือไม่ |
| AAC / ALAC.m4a · .aac · .alac | Platformของระบบ | Handled by the platform decoder and detected by format identity rather than by extension, so an ALAC track inside an .m4a container is recognised as ALAC. ใช้ decoder ของระบบ และตรวจจากตัวฟอร์แมตจริงไม่ใช่จากนามสกุล ไฟล์ ALAC ที่อยู่ในคอนเทนเนอร์ .m4a จึงถูกรู้จักว่าเป็น ALAC |
| Ogg / Opus.ogg · .oga · .opus | Platformของระบบ | The app ships no Vorbis or Opus decoder of its own, so whether a given file plays is entirely the operating system's decision. On iOS a file the system cannot open is dropped at scan time rather than added and then failing. แอปไม่มี decoder ของ Vorbis หรือ Opus เป็นของตัวเอง ไฟล์จะเล่นได้หรือไม่จึงขึ้นกับระบบปฏิบัติการล้วน ๆ บน iOS ไฟล์ที่ระบบเปิดไม่ได้จะถูกตัดออกตั้งแต่ตอนสแกน แทนที่จะถูกเพิ่มเข้ามาแล้วเล่นไม่ได้ทีหลัง |
Two details worth knowing before you plan a library. WavPack and APE tracks carry no tag metadata in this version — the title is the filename and the artist and album read as unknown — because those tracks are built from the decoder's stream information rather than from a tag parser. And Wi-Fi Import accepts a slightly narrower list than the scanner does: 14 extensions, without .wv and .ape. Those two you copy in through your phone's own file transfer, or reach through a selected folder on Android. สองเรื่องที่ควรรู้ก่อนวางแผนคลังเพลง แทร็ก WavPack และ APE ในเวอร์ชันนี้ยังไม่มี metadata จากแท็ก — ชื่อเพลงจะเป็นชื่อไฟล์ ส่วนศิลปินและอัลบั้มจะขึ้นว่าไม่ทราบ — เพราะแทร็กเหล่านี้ถูกสร้างจากข้อมูลสตรีมของ decoder ไม่ใช่จากตัวอ่านแท็ก และ Wi-Fi Import รับนามสกุลแคบกว่าตัวสแกนเล็กน้อย คือ 14 นามสกุล โดยไม่มี .wv และ .ape สองแบบนี้ให้คัดลอกเข้าเครื่องด้วยวิธีโอนไฟล์ปกติของโทรศัพท์ หรือชี้ไปที่โฟลเดอร์ที่เลือกไว้บน Android
Signal pathเส้นทางเสียง
What happens between the file and the jack.
อะไรเกิดขึ้นระหว่างไฟล์กับช่องเสียบหูฟัง
Every stage below is either off by default or does nothing at all unless the file asks for it. That is the whole design: the shortest path we can arrange is the one you get without configuring anything.
ทุกขั้นตอนด้านล่างนี้ ไม่ปิดมาตั้งแต่ต้น ก็ไม่ทำอะไรเลยจนกว่าไฟล์จะร้องขอ นั่นคือหลักการทั้งหมดของมัน — เส้นทางที่สั้นที่สุดเท่าที่เราจัดให้ได้ คือเส้นทางที่คุณได้โดยไม่ต้องตั้งค่าอะไรเลย
Decode
ถอดรหัส
Our C++ core for FLAC, WAV, AIFF, WavPack, APE and DSD; the platform decoder for MP3, AAC, ALAC, Ogg and Opus. The container is identified by magic bytes.
แกน C++ ของเราสำหรับ FLAC, WAV, AIFF, WavPack, APE และ DSD ส่วน MP3, AAC, ALAC, Ogg และ Opus ใช้ decoder ของระบบ คอนเทนเนอร์ถูกระบุจาก magic bytes
DSD only: decimate
เฉพาะ DSD: ลดอัตราสุ่ม
A Blackman-windowed sinc low-pass, 1,024 taps at DSD64 up to 2,560 at DSD512, cutting at 24 or 30 kHz, then integer decimation to 24-bit PCM. PCM files skip this stage entirely.
ฟิลเตอร์ low-pass แบบ sinc หน้าต่าง Blackman ตั้งแต่ 1,024 tap ที่ DSD64 ถึง 2,560 tap ที่ DSD512 ตัดที่ 24 หรือ 30 kHz แล้วลดอัตราสุ่มแบบ integer เป็น PCM 24-bit ไฟล์ PCM ข้ามขั้นตอนนี้ทั้งหมด
ReplayGain
ReplayGain
Acts only when the file already carries the tags, and only ever attenuates: the applied gain is clamped to 1.0 and capped by the peak tag, so it cannot clip a track by turning it up.
ทำงานเฉพาะเมื่อไฟล์มีแท็กอยู่แล้ว และลดระดับได้อย่างเดียว: เกนที่ใช้ถูกจำกัดไว้ไม่เกิน 1.0 และถูกคุมด้วยค่า peak จึงไม่มีทางทำให้เสียงคลิปเพราะดันขึ้นเกิน
Equalizer
อีควอไลเซอร์
A parametric cascade of up to 24 biquads in double precision, shipped as a 10-band graphic bank on the ISO octave centres. Auto-preamp measures the curve's own peak and pulls it back so the EQ cannot clip.
คาสเคดพาราเมตริกสูงสุด 24 biquad ที่ความละเอียด double ตั้งค่ามาเป็นแบบกราฟิก 10 แบนด์บนความถี่กลาง ISO octave ระบบ auto-preamp วัดยอดของเส้นโค้งเองแล้วดึงกลับ เพื่อไม่ให้ EQ ทำให้เสียงคลิป
Output
เอาต์พุต
The app requests the file's own sample rate, then reports the rate the system actually gave it. It refuses an output track that came back at the wrong rate or channel count rather than playing through it.
แอปขอ sample rate ตามไฟล์ แล้วรายงานอัตราที่ระบบให้มาจริง ถ้าแทร็กเอาต์พุตกลับมาด้วยอัตราหรือจำนวนแชนเนลที่ผิด แอปจะปฏิเสธแทนที่จะเล่นผ่านมันไป
The app does not resample your PCM
แอปไม่ทำ resample ไฟล์ PCM ของคุณ
There is no sample-rate converter anywhere in the PCM path. The only rate conversion in the whole engine is the DSD decimation in stage 02. A 96 kHz file is decoded at 96 kHz and handed to the system at 96 kHz. What the operating system's mixer, a Bluetooth codec or the DAC's own firmware does after that is outside the app, and the app says which route you are on rather than implying it controls all of them.
ไม่มีตัวแปลง sample rate อยู่ในเส้นทาง PCM เลย การแปลงอัตราเดียวในเอนจินทั้งตัว คือการลดอัตราสุ่มของ DSD ในขั้นที่ 02 ไฟล์ 96 kHz จะถูกถอดรหัสที่ 96 kHz และส่งให้ระบบที่ 96 kHz ส่วนสิ่งที่ mixer ของระบบปฏิบัติการ codec ของ Bluetooth หรือเฟิร์มแวร์ของ DAC ทำต่อจากนั้น อยู่นอกเหนือแอป แอปจะบอกว่าคุณกำลังใช้เส้นทางไหน แทนที่จะทำเหมือนว่ามันควบคุมได้ทุกเส้นทาง
Gapless, where gapless is actually possible
Gapless เท่าที่ gapless เป็นไปได้จริง
On its own engines the app opens the next track's decoder onto the same output track before the current one ends — but only when the sample rate, bit depth and channel count match exactly. A format change reconfigures the output, which is audible, and we would rather do that than pretend a 44.1 kHz track and a 192 kHz track can share one stream. On iOS the next same-format stream is scheduled ahead onto the same player node.
บนเอนจินของแอปเอง แอปจะเปิด decoder ของเพลงถัดไปเข้ากับแทร็กเอาต์พุตเดิมก่อนเพลงปัจจุบันจบ แต่ทำได้เฉพาะเมื่อ sample rate ความลึกบิต และจำนวนแชนเนลตรงกันทุกค่า ถ้าฟอร์แมตเปลี่ยน เอาต์พุตจะถูกตั้งค่าใหม่ซึ่งได้ยินได้ และเรายอมให้เป็นอย่างนั้น ดีกว่าจะแกล้งทำเป็นว่าแทร็ก 44.1 kHz กับ 192 kHz ใช้สตรีมเดียวกันได้ ส่วนบน iOS สตรีมถัดไปที่ฟอร์แมตเดียวกันจะถูกจัดคิวล่วงหน้าไว้บน player node เดิม
What we will not claim
สิ่งที่เราจะไม่เคลม
This category is full of wording that sounds like a measurement and is not one. Here is where our own claims stop, and why.
สินค้ากลุ่มนี้เต็มไปด้วยคำที่ฟังดูเหมือนผลการวัด ทั้งที่ไม่ใช่ ตรงนี้คือจุดที่คำเคลมของเราหยุด และเหตุผลว่าทำไม
Not "bit-perfect"
ไม่ใช่ "bit-perfect"
Android 14 and above has an experimental Direct USB route that will only open if the DAC advertises an exactly matching mixer format. Even then the app calls it requested, not verified, because nothing in software can confirm what left the converter. That path is not hardware-qualified yet. On iOS a matching route is described as exact sample rate through the system mixer and nothing stronger.
Android 14 ขึ้นไปมีเส้นทาง Direct USB แบบทดลอง ซึ่งจะเปิดก็ต่อเมื่อ DAC ประกาศฟอร์แมต mixer ที่ตรงกันทุกค่า และถึงตอนนั้นแอปก็ยังเรียกว่า ร้องขอแล้ว ไม่ใช่ยืนยันแล้ว เพราะไม่มีซอฟต์แวร์ใดยืนยันได้ว่าอะไรออกจากตัวแปลงสัญญาณจริง เส้นทางนี้ยังไม่ผ่านการทดสอบกับฮาร์ดแวร์ ส่วนบน iOS เส้นทางที่ตรงกันจะถูกอธิบายว่า sample rate ตรงผ่าน mixer ของระบบ เท่านั้น ไม่มากกว่านั้น
Not native DSD
ไม่ใช่ native DSD
DSD reaches a converter one of two ways: decimated to PCM, or packed as DoP inside a 24-bit PCM frame. There is no raw one-bit transport in this codebase, and the DoP path is Android 14+, experimental, and not yet verified against a DAC matrix.
DSD ไปถึงตัวแปลงสัญญาณได้สองทาง คือถูกลดอัตราสุ่มเป็น PCM หรือถูกแพ็กเป็น DoP อยู่ในเฟรม PCM 24-bit ไม่มีการส่งสัญญาณ 1-bit ดิบในโค้ดเบสนี้ และเส้นทาง DoP เป็นของ Android 14+ ยังเป็นการทดลอง และยังไม่ได้ตรวจกับชุด DAC จริง
DSD to PCM is a conversion, not a copy
DSD เป็น PCM คือการแปลง ไม่ใช่การคัดลอก
The conversion is a deliberate 6.02 dB attenuation and a brickwall at 24 or 30 kHz. Fully modulated DSD lands at −6.02 dBFS. That is a design choice for headroom, and it is a change to the signal, so we describe it as one.
การแปลงนี้คือการลดระดับ 6.02 dB โดยตั้งใจ พร้อมฟิลเตอร์ตัดชันที่ 24 หรือ 30 kHz สัญญาณ DSD ที่มอดูเลตเต็มที่จะลงมาอยู่ที่ −6.02 dBFS นี่คือการเลือกออกแบบเพื่อเผื่อ headroom และมันคือการเปลี่ยนสัญญาณ เราจึงอธิบายมันตามนั้น
No MQA
ไม่มี MQA
There is no MQA code in this project and no MQA licence. An MQA file plays as the FLAC or PCM container it is stored in, with no unfolding and no rendering.
โปรเจกต์นี้ไม่มีโค้ด MQA และไม่มีใบอนุญาต MQA ไฟล์ MQA จะเล่นในฐานะคอนเทนเนอร์ FLAC หรือ PCM ที่มันถูกเก็บไว้ ไม่มีการ unfold และไม่มีการ render
Lossy stays lossy
ไฟล์ lossy ก็ยังเป็น lossy
Decoding an MP3 accurately does not restore what the encoder removed, and nothing in this app claims to. Hybrid WavPack is a specific case of the same rule: without its correction file it is the lossy half, and we do not call it lossless.
การถอดรหัส MP3 ได้อย่างแม่นยำ ไม่ได้คืนสิ่งที่ encoder ตัดทิ้งไปแล้ว และไม่มีส่วนไหนของแอปนี้เคลมแบบนั้น hybrid WavPack เป็นกรณีเฉพาะของกติกาเดียวกัน: ถ้าไม่มีไฟล์ correction มันคือครึ่งที่เป็น lossy และเราไม่เรียกมันว่า lossless
No device measurements yet
ยังไม่มีผลวัดจากอุปกรณ์จริง
We have decoder benchmarks from a development machine and no phone numbers at all — no startup time, no battery figure, no thermal result. So we quote none. The physical-device qualification matrix is written and not yet run.
เรามีผลเบนช์มาร์กของ decoder จากเครื่องพัฒนา และยังไม่มีตัวเลขจากโทรศัพท์เลย — ไม่มีเวลาเปิดแอป ไม่มีตัวเลขแบตเตอรี่ ไม่มีผลทดสอบความร้อน เราจึงไม่อ้างตัวเลขใดเลย ชุดทดสอบบนอุปกรณ์จริงเขียนไว้แล้วแต่ยังไม่ได้รัน
Engineeringคุณภาพของโค้ด
The parts you cannot hear, measured anyway.
ส่วนที่คุณไม่ได้ยิน แต่ก็ยังวัดอยู่ดี
An audio decoder is a parser that runs on files it did not create, which is the definition of an attack surface. It is also the one component where a subtle mistake is silent — a wrong sample is not a crash report, it is a slightly worse recording that nobody attributes to the player. Both of those pushed the same way: test the decoder like a library, not like a feature.
ตัวถอดรหัสเสียงคือ parser ที่ต้องทำงานกับไฟล์ที่มันไม่ได้สร้างเอง ซึ่งก็คือนิยามของ attack surface และมันยังเป็นส่วนเดียวที่ความผิดพลาดเล็ก ๆ จะเงียบสนิท — sample ที่ผิดไม่ได้กลายเป็นรายงานแครช แต่กลายเป็นไฟล์บันทึกเสียงที่แย่ลงนิดหน่อยโดยไม่มีใครโทษเครื่องเล่น ทั้งสองเหตุผลผลักไปทางเดียวกัน คือทดสอบ decoder แบบไลบรารี ไม่ใช่แบบฟีเจอร์
Golden hashes, not eyeballs
ตรวจด้วยแฮช ไม่ใช่ด้วยหู
WAV, WAVE-extensible, AIFF, AIFC and FLAC are each decoded at 16, 24 and 32 bits and checked against a fixed hash of the output samples. If a refactor changes one sample of the decoded audio, the build fails. Six more cases assert that deliberately malformed headers are rejected rather than half-read.
WAV, WAVE-extensible, AIFF, AIFC และ FLAC ถูกถอดรหัสที่ 16, 24 และ 32 bit แล้วเทียบกับแฮชคงที่ของ sample ที่ได้ ถ้าการรีแฟกเตอร์ทำให้ sample เปลี่ยนไปแม้แต่ค่าเดียว บิลด์จะพัง และมีอีกหกเคสที่ยืนยันว่าไฟล์ที่ header ผิดรูปโดยตั้งใจ จะถูกปฏิเสธ ไม่ใช่อ่านไปครึ่งทาง
A fuzz finding that changed the build
ผลจาก fuzz ที่ทำให้ต้องแก้บิลด์
The container fuzzer found a signed-overflow undefined-behaviour case in the upstream FLAC library's LPC restore. The input is kept as a permanent regression seed and the vendored library is now compiled with -fwrapv. Zero crashes in 2.1 million executions is evidence against that corpus — not a proof of memory safety, and we do not present it as one.
fuzzer ของคอนเทนเนอร์เจอเคส undefined behaviour แบบ signed overflow ในส่วน LPC restore ของไลบรารี FLAC ต้นทาง อินพุตนั้นถูกเก็บเป็น seed ทดสอบถาวร และไลบรารีที่ผนวกมาถูกคอมไพล์ด้วย -fwrapv แล้ว การรัน 2.1 ล้านครั้งโดยไม่แครชเป็นหลักฐานเทียบกับคลังอินพุตชุดนั้น ไม่ใช่ข้อพิสูจน์ว่าโค้ดปลอดภัยด้านหน่วยความจำ และเราไม่ได้นำเสนอมันแบบนั้น
Contrast is a test, not a review note
คอนทราสต์เป็นเทสต์ ไม่ใช่คอมเมนต์ตอนรีวิว
Every colour pair in all four palettes is computed in a unit test and the build fails below the accessibility floor — 4.5:1 for body text, 3:1 for glyphs and rules. Writing that test is what found a label that cleared the floor on white and missed it on the warm page ground, a gap no design review had caught.
ทุกคู่สีในทั้งสี่พาเลตต์ถูกคำนวณใน unit test และบิลด์จะพังถ้าต่ำกว่าเกณฑ์การเข้าถึง — 4.5:1 สำหรับข้อความเนื้อหา และ 3:1 สำหรับไอคอนและเส้น การเขียนเทสต์นั้นเองคือสิ่งที่เจอว่า มีสีข้อความหนึ่งผ่านเกณฑ์บนพื้นขาวแต่ไม่ผ่านบนพื้นหน้ากระดาษโทนอุ่น ซึ่งเป็นช่องโหว่ที่การรีวิวงานออกแบบไม่เคยจับได้
Release gates that refuse
ประตูก่อนปล่อยที่ปฏิเสธจริง
A release build cannot be produced while the application ID is still a placeholder, the app name is unset, the privacy-policy URL is not a public HTTPS address, or the upload key is missing. The gate is a dependency of the bundle task, so it cannot be stepped around. Run today it still refuses, on the privacy URL and the signing key.
บิลด์สำหรับปล่อยจะสร้างไม่ได้ ตราบใดที่ application ID ยังเป็นค่าตัวอย่าง ชื่อแอปยังไม่ได้ตั้ง URL นโยบายความเป็นส่วนตัวยังไม่ใช่ที่อยู่ HTTPS สาธารณะ หรือยังไม่มีคีย์สำหรับอัปโหลด ประตูนี้เป็น dependency ของ task ที่สร้างไฟล์ จึงเดินอ้อมไม่ได้ และถ้ารันวันนี้ มันก็ยังปฏิเสธอยู่ ด้วยเหตุผลเรื่อง URL นโยบายและคีย์เซ็นแพ็กเกจ
Warnings are errors, where it counts
คำเตือนคือข้อผิดพลาด ในที่ที่มันสำคัญ
All C++ in the shared core and the JNI bridge compiles with -Wall -Wextra -Werror on both platforms' build paths. A second gate blocks a minified build when a class declaring a native method has no matching keep rule — and fails loudly if it finds no such classes at all, so it cannot rot into a no-op.
โค้ด C++ ทั้งหมดในแกนกลางและชั้น JNI คอมไพล์ด้วย -Wall -Wextra -Werror บนเส้นทางบิลด์ของทั้งสองแพลตฟอร์ม และมีประตูที่สองที่บล็อกบิลด์แบบ minified เมื่อคลาสที่ประกาศเมธอด native ไม่มี keep rule ที่ตรงกัน — และจะพังเสียงดังถ้าหาคลาสแบบนั้นไม่เจอเลย เพื่อไม่ให้มันค่อย ๆ กลายเป็นเช็กที่ไม่ทำอะไร
Written, and honestly not yet run
เขียนไว้แล้ว และยังไม่ได้รัน ตามตรง
There are 117 instrumented Android tests and 152 iOS XCTest cases in the source. Only a handful of the instrumented ones have a recorded run, and that was on an emulator. No physical-device result of any kind exists yet. They are written; they are not evidence, and they are listed here as work rather than as a number.
ในซอร์สมี instrumented test ฝั่ง Android 117 เคส และ XCTest ฝั่ง iOS 152 เคส มีเพียงไม่กี่เคสของฝั่ง instrumented ที่มีบันทึกว่ารันแล้ว และรันบน emulator ยังไม่มีผลจากอุปกรณ์จริงเลยแม้แต่รายการเดียว มันถูกเขียนไว้แล้ว แต่ยังไม่ใช่หลักฐาน จึงถูกระบุตรงนี้ในฐานะงานที่ค้าง ไม่ใช่ในฐานะตัวเลข
What is not here. There is no continuous integration server, no coverage percentage, and no static-analysis gate on the Kotlin or Swift side — -Werror applies to C++ only, and the most recent Android lint run reported 0 errors with 51 open warnings. Every number on this page came from a command run against this source tree, not from a dashboard. สิ่งที่ยังไม่มี ยังไม่มีเซิร์ฟเวอร์ CI ไม่มีตัวเลข coverage และยังไม่มีประตูตรวจโค้ดแบบ static analysis ฝั่ง Kotlin หรือ Swift — -Werror ใช้กับ C++ เท่านั้น และการรัน lint ฝั่ง Android ครั้งล่าสุด ได้ 0 error พร้อมคำเตือนค้างอยู่ 51 รายการ ตัวเลขทุกตัวบนหน้านี้มาจากคำสั่งที่รันกับซอร์สชุดนี้จริง ไม่ได้มาจากแดชบอร์ด
Privacyความเป็นส่วนตัว
One outbound request in the whole app, and you have to ask for it.
ทั้งแอปมีคำขอออกอินเทอร์เน็ตอยู่ทางเดียว และคุณต้องเป็นคนสั่ง
There is no account, no sign-in, no subscription, no advertising, and no analytics, crash-reporting or attribution library anywhere in the source. Outside the local network, exactly one feature can reach the internet: looking up a missing album cover. It is off by default, it runs on the one album you tapped, and what it sends is an album title and an artist name — no file, no path, no identifier of any kind.
ไม่มีบัญชีผู้ใช้ ไม่มีการล็อกอิน ไม่มีระบบสมาชิก ไม่มีโฆษณา และไม่มีไลบรารี analytics, crash-reporting หรือ attribution อยู่ในซอร์สเลย นอกเครือข่ายภายในบ้าน มีฟีเจอร์เดียวเท่านั้นที่ออกอินเทอร์เน็ตได้ คือการค้นหาปกอัลบั้มที่ขาดไป ซึ่งปิดไว้ตั้งแต่ต้น ทำงานเฉพาะกับอัลบั้มที่คุณกด และสิ่งที่ส่งออกไปคือชื่ออัลบั้มกับชื่อศิลปิน — ไม่มีไฟล์ ไม่มีพาธ และไม่มีตัวระบุตัวตนใด ๆ
What the app can reach
แอปติดต่อกับอะไรได้บ้าง
| Album cover lookup | ค้นหาปกอัลบั้ม | Off by default. Sends an album title and artist name to two public music databases, at most one request per second, only for the album you asked about. ปิดไว้ตั้งแต่ต้น ส่งชื่ออัลบั้มและชื่อศิลปินไปยังฐานข้อมูลเพลงสาธารณะสองแห่ง ไม่เกินหนึ่งคำขอต่อวินาที เฉพาะอัลบั้มที่คุณสั่งค้นเท่านั้น |
| Wi-Fi Import | Wi-Fi Import | Your own network only, and only while you have it switched on. Plain HTTP — a phone cannot obtain a browser-trusted certificate for an ad-hoc address, so use a network you trust. อยู่ในเครือข่ายของคุณเท่านั้น และมีอยู่เฉพาะตอนที่คุณเปิดไว้ ใช้ HTTP ธรรมดา — โทรศัพท์ออกใบรับรองที่เบราว์เซอร์เชื่อถือให้ที่อยู่ชั่วคราวไม่ได้ จึงควรใช้กับเครือข่ายที่คุณไว้ใจ |
| Media servers | เซิร์ฟเวอร์สื่อในบ้าน | UPnP and SMB browsing is restricted to private address ranges by an allowlist that is re-checked after every redirect, and a hostname is accepted only if every address it resolves to is private. การเรียกดูผ่าน UPnP และ SMB ถูกจำกัดไว้เฉพาะช่วงที่อยู่ภายในด้วย allowlist ที่ตรวจซ้ำหลังทุกการ redirect และชื่อโฮสต์จะถูกยอมรับก็ต่อเมื่อทุกที่อยู่ที่มันชี้ไปเป็นที่อยู่ภายในทั้งหมด |
| Everything else | ที่เหลือทั้งหมด | Nothing. Cleartext traffic is disabled application-wide, cloud backup and device-to-device transfer of app data are both switched off, and your library, play counts and settings never leave the phone. ไม่มี การรับส่งแบบไม่เข้ารหัสถูกปิดทั้งแอป การสำรองขึ้นคลาวด์และการโอนข้อมูลแอประหว่างเครื่องถูกปิดทั้งคู่ และคลังเพลง จำนวนครั้งที่เล่น กับการตั้งค่าของคุณ ไม่เคยออกจากโทรศัพท์ |
Wi-Fi Import, in detail
รายละเอียดของ Wi-Fi Import
The server binds to one Wi-Fi address on an ephemeral port, never to every interface. Each session mints a fresh 128-bit pairing token compared in constant time. Four clients may connect but only one upload runs at a time; a stalled request is dropped after a ten-second header deadline and a thirty-second read timeout, and a rejected request's body is drained under a hard budget so a slow client cannot hold a slot open.
เซิร์ฟเวอร์ผูกกับที่อยู่ Wi-Fi หนึ่งที่อยู่บนพอร์ตชั่วคราว ไม่เคยผูกกับทุกอินเทอร์เฟซ แต่ละเซสชันสร้างโทเคนจับคู่ขนาด 128 บิตใหม่ และเปรียบเทียบด้วยเวลาคงที่ ลูกข่ายต่อพร้อมกันได้สี่ราย แต่อัปโหลดได้ทีละหนึ่งไฟล์ คำขอที่ค้างจะถูกตัดทิ้งหลังเส้นตาย header สิบวินาที และ read timeout สามสิบวินาที ส่วนคำขอที่ถูกปฏิเสธจะถูกอ่านทิ้งภายในงบที่จำกัด เพื่อไม่ให้ลูกข่ายที่ช้าค้างช่องเชื่อมต่อไว้ได้
A filename is stripped of every separator and control character, must end in one of the allowed audio extensions, and is never joined onto a caller-supplied path. Uploaded bytes land in a reserved temporary file and are actually decoded before the file is allowed into the library — so a truncated or mislabelled upload is rejected with an error instead of becoming a track that will not play.
ชื่อไฟล์จะถูกตัดตัวคั่นและอักขระควบคุมออกทั้งหมด ต้องลงท้ายด้วยนามสกุลเสียงที่อนุญาต และไม่เคยถูกนำไปต่อกับพาธที่ผู้เรียกส่งมา ไบต์ที่อัปโหลดจะลงในไฟล์ชั่วคราวที่จองไว้ และถูกถอดรหัสจริงก่อนได้รับอนุญาตให้เข้าคลังเพลง — ไฟล์ที่ขาดหายหรือติดนามสกุลผิด จึงถูกปฏิเสธพร้อมข้อความผิดพลาด แทนที่จะกลายเป็นแทร็กที่กดแล้วไม่เล่น
Where this claim stops. All of the above is source review and unit tests, not an outside audit — nobody independent has security-tested this app, and we do not describe it as audited, pen-tested or certified. Wi-Fi Import is not encrypted, so anyone watching your local network can read its traffic. And because the cover lookup exists, the honest statement is one optional outbound request, not “nothing ever leaves your device.” ขอบเขตของคำเคลมนี้ ทั้งหมดข้างต้นมาจากการตรวจซอร์สและ unit test ไม่ใช่การตรวจสอบจากภายนอก — ยังไม่มีบุคคลที่สามมาทดสอบความปลอดภัยของแอปนี้ และเราไม่ได้อธิบายว่ามันผ่านการตรวจสอบ ผ่าน pen-test หรือได้รับการรับรอง Wi-Fi Import ไม่ได้เข้ารหัส คนที่ดักดูเครือข่ายภายในของคุณจึงอ่านการรับส่งของมันได้ และเพราะฟีเจอร์ค้นหาปกมีอยู่จริง คำพูดที่ตรงที่สุดคือ มีคำขอออกภายนอกหนึ่งทางแบบเลือกเปิด ไม่ใช่ "ไม่มีอะไรออกจากเครื่องคุณเลย"
Questionsคำถาม
The things you would ask before installing it.
เรื่องที่คุณน่าจะถามก่อนจะติดตั้ง
Can I install it today?ตอนนี้ติดตั้งได้หรือยัง
No. Audivelle is not published on Google Play or the App Store, and this site does not distribute builds. The Android release still needs an upload key, a published privacy policy, store assets and a physical-device qualification pass; the iOS build needs its own release preconditions met. When there is something to install, it will be said here plainly.
ยังครับ Audivelle ยังไม่ได้เผยแพร่บน Google Play หรือ App Store และเว็บนี้ไม่ได้แจกไฟล์ติดตั้ง ฝั่ง Android ยังต้องมีคีย์สำหรับอัปโหลด นโยบายความเป็นส่วนตัวที่เผยแพร่แล้ว asset ของสโตร์ และการทดสอบบนอุปกรณ์จริงให้ผ่าน ส่วนฝั่ง iOS ก็ต้องผ่านเงื่อนไขก่อนปล่อยของตัวเอง เมื่อไรมีของให้ติดตั้ง จะเขียนบอกตรงนี้ตรง ๆ
Is it bit-perfect?มันเป็น bit-perfect ไหม
We do not make that claim. On Android 14 and above there is an experimental Direct USB route that opens only when the DAC advertises an exactly matching format, and even then the app labels it requested rather than verified, because software cannot confirm what came out of the converter. On iOS a matching route is described as exact sample rate through the system mixer. Anyone who tells you their app is bit-perfect on every phone and every route is describing an intention.
เราไม่เคลมแบบนั้น บน Android 14 ขึ้นไปมีเส้นทาง Direct USB แบบทดลอง ซึ่งจะเปิดก็ต่อเมื่อ DAC ประกาศฟอร์แมตที่ตรงกันทุกค่า และถึงตอนนั้นแอปก็ยังระบุว่า ร้องขอแล้ว ไม่ใช่ยืนยันแล้ว เพราะซอฟต์แวร์ยืนยันไม่ได้ว่าอะไรออกจากตัวแปลงสัญญาณ ส่วนบน iOS เส้นทางที่ตรงกันจะถูกอธิบายว่า sample rate ตรงผ่าน mixer ของระบบ ใครก็ตามที่บอกว่าแอปของเขา bit-perfect บนทุกเครื่องและทุกเส้นทาง กำลังอธิบายความตั้งใจ ไม่ใช่ผลวัด
Does it play MQA?เล่น MQA ได้ไหม
An MQA file plays as the FLAC or PCM container it is stored in. There is no MQA code in this project and no licence, so there is no unfolding and no rendering.
ไฟล์ MQA จะเล่นในฐานะคอนเทนเนอร์ FLAC หรือ PCM ที่มันถูกเก็บไว้ โปรเจกต์นี้ไม่มีโค้ด MQA และไม่มีใบอนุญาต จึงไม่มีการ unfold และไม่มีการ render
Why convert DSD to PCM at all?ทำไมต้องแปลง DSD เป็น PCM
Because a phone's audio output takes PCM. The alternative is DoP, which carries DSD bytes inside a PCM frame to a DAC that can unpack them; that path exists on Android 14 and above, is experimental, and needs a specific USB DAC. For everything else the file is filtered and decimated, which is a real change to the signal — a brickwall at 24 or 30 kHz and 6.02 dB of headroom — so we describe it as a conversion rather than as playback.
เพราะเอาต์พุตเสียงของโทรศัพท์รับ PCM ทางเลือกอีกทางคือ DoP ซึ่งส่งไบต์ DSD อยู่ในเฟรม PCM ไปให้ DAC ที่แกะออกได้ เส้นทางนั้นมีอยู่บน Android 14 ขึ้นไป ยังเป็นการทดลอง และต้องใช้ USB DAC ที่รองรับ ส่วนกรณีอื่นทั้งหมด ไฟล์จะถูกกรองและลดอัตราสุ่ม ซึ่งเป็นการเปลี่ยนสัญญาณจริง — ตัดชันที่ 24 หรือ 30 kHz และเผื่อ headroom 6.02 dB — เราจึงเรียกมันว่าการแปลง ไม่ใช่การเล่นไฟล์ตรง ๆ
What language is the app in?ตัวแอปเป็นภาษาอะไร
The app's interface is English only at the moment. This site is bilingual; the app is not yet. Localisation is on the list and is not done, and this page will not imply otherwise.
หน้าตาของแอปยังเป็นภาษาอังกฤษอย่างเดียวในตอนนี้ เว็บไซต์นี้เป็นสองภาษา แต่ตัวแอปยังไม่ใช่ การแปลภาษาอยู่ในรายการงานและยังไม่ได้ทำ และหน้านี้จะไม่ทำให้เข้าใจเป็นอย่างอื่น
Will it upload my library anywhere?มันจะอัปโหลดคลังเพลงของผมไปไหนไหม
No. The catalogue, favourites, playlists, play counts and settings are stored on the device and are excluded from cloud backup and device-to-device transfer. The only thing that can be sent off your network is an album title and artist name, for the one album you asked to find a cover for, when you have switched that on.
ไม่ครับ แค็ตตาล็อก รายการโปรด เพลย์ลิสต์ จำนวนครั้งที่เล่น และการตั้งค่า ถูกเก็บบนอุปกรณ์ และถูกกันออกจากการสำรองขึ้นคลาวด์และการโอนระหว่างเครื่อง สิ่งเดียวที่ส่งออกนอกเครือข่ายของคุณได้คือชื่ออัลบั้มกับชื่อศิลปิน เฉพาะอัลบั้มที่คุณสั่งให้ไปหาปก และเฉพาะเมื่อคุณเปิดฟีเจอร์นั้นไว้